**************************************************************************************
	;Header frs File-linken

	IFD	Flag_project
Flag_GlobalENE	set 1
	ENDC
	IFND	Flag_GlobalENE
Flag_GlobalENE	set 0
	ENDC
	IFEQ	Flag_GlobalENE
Flag_GlobalENE	set 1
	include	Nutz_project
	ELSEIF
**************************************************************************************
**************************************************************************************
*-------------------------------------------------------------------------------------
*------------	GLOBALE ENEMIES
*-------------------------------------------------------------------------------------
**************************************************************************************

**************************************************************************************
*-------------------------------------------------------------------------------------
*------------	GLOBAL BUMPER ROUT
*-------------------------------------------------------------------------------------
GBumper_Bump_Speed	=Bob_Special_1	;B
GBumper_Bump_Time	=Bob_Special_1+1	;B
GBumper_Work_Time	=Bob_Special_2	;B
GBumper_BackAnim_Flg	=Bob_Special_2+1	;B
GBumper_Show_Rout	=Bob_Special_3	;LW
GBumper_Work_Anim	=Bob_Koords_Save1	;LW
GBumper_NoBump_Time	=Bob_Hit+1		;B
*-------------------------------------------------------------------------------------
Bumper_Rout_Gl	*--Standart Routs
		jsr	Standart_BobAnim
		move.l	GBumper_Show_Rout(a4),a0
		jsr	(a0)
		jsr	Test_Bob_Out

		tst.b	GBumper_Work_Time(a4)
		bmi	.Bumper_is_Working_Mi
		bne.s	.Bumper_is_Working
		tst.b	GBumper_NoBump_Time(a4)
		beq.s	.NormalBumpRout
		subq.b	#1,GBumper_NoBump_Time(a4)
		bra.s	.NoBump
.NormalBumpRout	*--Test if Timet is Bumping
		move	#$8,Bob_Anim_Delay_Init(a4)
		lea	WorkRam,a2
		cmp	#FLIEGEN,TEMET_Status(a2)
		beq.s	.NoBump
		jsr	KollTopBobTest
		tst	d7
		bmi 	.NoBump
		*--Turn on Kollision
		IFEQ	SOUNDFX
		moveq	#29,d0
		jsr	TFMX+16
		ENDC
		move.l	GBumper_Work_Anim(a4),Bob_Next_Anim(a4)
		jsr	Get_Next_Bob_Frame
		clr.w	Bob_Anim_Delay(a4)
		move	#1,Bob_Anim_Delay_Init(a4)
		move.b	GBumper_Bump_Time(a4),GBumper_Work_Time(a4)
		clr.w	STOP_Bumping(a6)
		move.b	#10,GBumper_NoBump_Time(a4)
		bra.s	.Bumper_is_Working
.NoBump		rts
.Bumper_is_Working	*--Work Bumper
		tst	STOP_Bumping(a6)
		beq.s	.NoStop
		clr.b	GBumper_Work_Time(a4)
		clr.w	STOP_Bumping(a6)
		rts
.NoStop		lea	WorkRam,a2
		subq.b	#1,GBumper_Work_Time(a4)

		jsr	Force_Init_Jump
		move	#SPRINGEN,TEMET_Status(a2)
		clr.w	TEMET_Speed_Y(a2)
		move.b	GBumper_Bump_Speed(a4),TEMET_Speed_Y(a2)
		rts

.Bumper_is_Working_Mi:
		addq.b	#1,GBumper_Work_Time(a4)
		rts

**************************************************************************************
*-------------------------------------------------------------------------------------
*------------	GLOBAL MOVER ROUTS
*-------------------------------------------------------------------------------------
MOVER_WATER_SUB	=10
*-------------------------------------------------------------------------------------
*--GLOBAl VALUES
Mover_Move_Routine	=Bob_Koords_Save2	;LW
Mover_XY_Dirs	=Bob_Special_1	;B
Mover_XY_NextDirs	=Bob_Special_1+1	;B
Move_X_Speed	=Bob_Special_2	;B
Move_Y_Speed	=Bob_Special_2+1	;B
Mover_X_Wait_Time	=Bob_Special_3	;B
Mover_Y_Wait_Time	=Bob_Special_3+1	;B
Mover_TEMET_On	=Bob_Special_4	;B
*--FREE Values
Mover_Set_To_Water	=Bob_Special_4+1	;B
Mover_X_Offset	=Bob_Koords_Save1	;W
Mover_Y_Offset	=Bob_Koords_Save1+2	;W
Mover_WY_Speed	=Bob_Hit		;W
*--SRE Values
Mover_Sre_Anim	=Bob_Plane_Order	;B
Mover_Sre_Blink	=Bob_Plane_Order+1	;B
Mover_Sre_Time_Init	=Bob_Plane_Order+2	;B
Mover_Sre_Time	=Bob_Plane_Order+3	;B
*--CLOUDS
Mover_Sre_Aufl_Flag	=Bob_Plane_Order+2	;B
*- - - - - - - - - - - - - - - - - - - - - - - - - - -
*--Kron Values
Mover_Kron_Dir	=Bob_Special_1+1	;B
Mover_Kron_Rest	=Bob_Hit		;W
Mover_Kron_Speed	=Bob_Koords_Save1	;W
Mover_Kron_Acce	=Bob_Koords_Save1+2	;W
Mover_Kron_Brems	=Bob_Koords_Save1+3	;W
Mover_Kron_Offset	=Bob_Koords_Save2	;W
Mover_Kron_Size	=Bob_Koords_Save2+2	;W
Mover_Old_X		=Bob_Plane_Order	;W
Mover_Old_Y		=Bob_Plane_Order+2	;W
*- - - - - - - - - - - - - - - - - - - - - - - - - - -
*--KETTENMOVER
Kette_Y_Up_Pos	=Bob_Plane_Order	;W
*---------------------------------------------------------------------------
UP_BIT		=0
RIGHT_BIT		=1
DOWN_BIT		=2
LEFT_BIT		=3
*-------------------------------------------------------------------------------------
I_Mover_KRON_64:	*--*>Init Values For KronLeuchter
		move.b	#1,Mover_Kron_Dir(a4)
		move.w	#34*2,Mover_Kron_Offset(a4)
		move.w	#$0300,Mover_Kron_Speed(a4)
		move.b	#$18,Mover_Kron_Acce(a4)
		move.b	#$18,Mover_Kron_Brems(a4)
		move.l	#Mover_Kron,Bob_Routine(a4)
		clr.b	Move_X_Speed(a4)
		bset.b	#DOWN_BIT,Mover_XY_Dirs(a4)
		bset.b	#RIGHT_BIT,Mover_XY_Dirs(a4)
		move	#-68,Mover_Old_X(a4)
		move	#0,Mover_Old_Y(a4)
		move	#64-8,Mover_Kron_Size(a4)
		rts		
*-------------------------------------------------------------------------------------
I_Mover_KRON_96:	*--*>Init Values For KronLeuchter
		move.b	#1,Mover_Kron_Dir(a4)
		move.w	#34*2,Mover_Kron_Offset(a4)
		move.w	#$0300,Mover_Kron_Speed(a4)
		move.b	#$18,Mover_Kron_Acce(a4)
		move.b	#$18,Mover_Kron_Brems(a4)
		move.l	#Mover_Kron,Bob_Routine(a4)
		clr.b	Move_X_Speed(a4)
		bset.b	#DOWN_BIT,Mover_XY_Dirs(a4)
		bset.b	#RIGHT_BIT,Mover_XY_Dirs(a4)
		move	#-68,Mover_Old_X(a4)
		move	#0,Mover_Old_Y(a4)
		move	#96-8,Mover_Kron_Size(a4)
		rts		

*-------------------------------------------------------------------------------------
Check_GlobalRout	*--*>Check which GlobalRout to Init
		cmp.l	#IMover_AnimTable+10,Bob_Next_Anim(a4)
		beq.s	.InitInkaGlobal
		cmp.l	#NMover_AnimTable+10,Bob_Next_Anim(a4)
		beq.s	.InitNaturGlobal
		cmp.l	#UMover_AnimTable+10,Bob_Next_Anim(a4)
		beq.s	.InitUnderGlobal
		cmp.l	#TMover_AnimTable+10,Bob_Next_Anim(a4)
		beq.s	.InitTekknoGlobal
		rts
.InitNaturGlobal	move.l	#Mover_NGlobal,Bob_Routine(a4)
		rts
.InitInkaGlobal	move.l	#Mover_IGlobal,Bob_Routine(a4)
		rts
.InitUnderGlobal	move.l	#Mover_UGlobal,Bob_Routine(a4)
		rts
.InitTekknoGlobal	move.l	#Mover_TGlobal,Bob_Routine(a4)
		rts
*-------------------------------------------------------------------------------------
Check_GlobalRoutW	*--*>Check which GlobalRout to Init
		cmp.l	#UMover_AnimTable+10,Bob_Next_Anim(a4)
		beq.s	.InitUnderGlobal
		cmp.l	#TMover_AnimTable+10,Bob_Next_Anim(a4)
		beq.s	.InitTekknoGlobal
		rts
.InitUnderGlobal	move.l	#Mover_UGlobal_Water,Bob_Routine(a4)
		rts
.InitTekknoGlobal	move.l	#Mover_TGlobal_Water,Bob_Routine(a4)
		rts
*-------------------------------------------------------------------------------------
I_Mover_WaterRout_1_W	*--*>Init Values for MoverYRout
		move.w	#600,Bob_Out_X_Val(a4)
		jsr	Check_GlobalRoutW
		move.l	#Mover_Water,Mover_Move_Routine(a4)
		;move.l	#Move_With_Water,Mover_Move_Routine(a4)
		move.b	#121,Mover_X_Wait_Time(a4)
		*--*>Set Mover to WaterY
		clr.b	Mover_Set_To_Water(a4)
		move	Water_YPos(a6),d0
		move	d0,Bob_Y_Position(a4)
		sub	#MOVER_WATER_SUB,Bob_Y_Position(a4)
		*--*>Init Y Offset
		move	#WAIT_JUMP,Mover_Y_Offset(a4)
		*--*>Init Left or Right
		move	Bob_X_Position(a4),d0
		move	Bob_Y_Position(a4),d1
		add	#4*16,d0
		jsr	Get_Block_Flags
		swap	d0
		btst	#SCR_KOLLISION_BIT,d0
		beq	.Init_Mover_RIGHT
.Init_Mover_LEFT	*--Bits Right -> Mover Left
		bset.b	#LEFT_BIT,Mover_XY_Dirs(a4)
		bset.b	#LEFT_BIT,Mover_XY_NextDirs(a4)
		rts
.Init_Mover_RIGHT	*--Bits Left -> Mover Right
		bset.b	#RIGHT_BIT,Mover_XY_Dirs(a4)
		bset.b	#RIGHT_BIT,Mover_XY_NextDirs(a4)
		rts
*-------------------------------------------------------------------------------------
I_Mover_WaterRout_1_M	*--*>Init Values for MoverYRout
		move.w	#600,Bob_Out_X_Val(a4)
		jsr	Check_GlobalRoutW
		move.l	#Mover_Water,Mover_Move_Routine(a4)
		;move.l	#Move_With_Water,Mover_Move_Routine(a4)
		move.b	#20,Mover_X_Wait_Time(a4)
		*--*>Set Mover to WaterY
		clr.b	Mover_Set_To_Water(a4)
		move	Water_YPos(a6),d0
		move	d0,Bob_Y_Position(a4)
		sub	#MOVER_WATER_SUB,Bob_Y_Position(a4)
		*--*>Init Y Offset
		move	#WAIT_JUMP,Mover_Y_Offset(a4)
		*--*>Init Left or Right
		*--Test Bits Right
		move	Bob_X_Position(a4),d0
		move	Bob_Y_Position(a4),d1
		add	#4*16,d0
		jsr	Get_Block_Flags
		swap	d0
		btst	#SCR_KOLLISION_BIT,d0
		beq	.Init_Mover_RIGHT
.Init_Mover_LEFT	*--Bits Right -> Mover Left
		bset.b	#LEFT_BIT,Mover_XY_Dirs(a4)
		bset.b	#LEFT_BIT,Mover_XY_NextDirs(a4)
		rts
.Init_Mover_RIGHT	*--Bits Left -> Mover Right
		bset.b	#RIGHT_BIT,Mover_XY_Dirs(a4)
		bset.b	#RIGHT_BIT,Mover_XY_NextDirs(a4)
		rts
*-------------------------------------------------------------------------------------
I_Mover_WaterRout_1_N	*--*>Init Values for MoverYRout
		move.w	#200,Bob_Out_X_Val(a4)
		jsr	Check_GlobalRout
		move.l	#Move_With_Water,Mover_Move_Routine(a4)
		move.b	#121,Mover_X_Wait_Time(a4)
		*--*>Set Mover to WaterY
		clr.b	Mover_Set_To_Water(a4)
		move	Water_YPos(a6),d0
		move	d0,Bob_Y_Position(a4)
		sub	#MOVER_WATER_SUB,Bob_Y_Position(a4)
		*--*>Init Y Offset
		move	#WAIT_JUMP,Mover_Y_Offset(a4)
		*--*>Init Left or Right
		rts
*-------------------------------------------------------------------------------------
I_Mover_WaterRout_1_U	*--*>Init Values for MoverYRout
		move.w	#20000,Bob_Out_X_Val(a4)
		move.w	#20000,Bob_Out_Y_Val(a4)
		jsr	Check_GlobalRout
		move.l	#Move_With_Water,Mover_Move_Routine(a4)
		move.b	#121,Mover_X_Wait_Time(a4)
		*--*>Set Mover to WaterY
		clr.b	Mover_Set_To_Water(a4)
		move	Water_YPos(a6),d0
		move	d0,Bob_Y_Position(a4)
		sub	#MOVER_WATER_SUB,Bob_Y_Position(a4)
		*--*>Init Y Offset
		move	#WAIT_JUMP,Mover_Y_Offset(a4)
		*--*>Init Left or Right
		rts
*-------------------------------------------------------------------------------------
I_Mover_Nothing:	*--*>Init Values for MoverYRout
		jsr	Check_GlobalRout
		move.l	#RoutRts,Mover_Move_Routine(a4)
		clr.b	Mover_Y_Wait_Time(a4)
		move.w	#200,Bob_Out_X_Val(a4)
		move.w	#200+32,Bob_Out_Y_Val(a4)
		rts
*-------------------------------------------------------------------------------------
I_KMover_Y_Rout_1_W:	move.w	#600+32,Bob_Out_Y_Val(a4)
		move.l	#Mover_Move_Y_Bit,Mover_Move_Routine(a4)
		move.l	#Mover_UKGlobal,Bob_Routine(a4)
		move.b	#121,Mover_Y_Wait_Time(a4)
		jsr	Search_Top_Pos
		bra.s	YROUTGLOBAL
*-------------------------------------------------------------------------------------
I_Mover_Y_Rout_1_W	*--*>Init Values for MoverYRout
		move.w	#600+32,Bob_Out_Y_Val(a4)
		jsr	Check_GlobalRout
		move.l	#Mover_Move_Y_Bit,Mover_Move_Routine(a4)
		move.b	#121,Mover_Y_Wait_Time(a4)
		bra.s	YROUTGLOBAL
*-------------------------------------------------------------------------------------
I_KMover_Y_Rout_1_M:	move.w	#600+32,Bob_Out_Y_Val(a4)
		move.l	#Mover_Move_Y_Bit,Mover_Move_Routine(a4)
		move.l	#Mover_UKGlobal,Bob_Routine(a4)
		move.b	#20,Mover_Y_Wait_Time(a4)
		jsr	Search_Top_Pos
		bra.s	YROUTGLOBAL
*-------------------------------------------------------------------------------------
I_Mover_Y_Rout_1_M	*--*>Init Values for MoverYRout
		move.w	#600+32,Bob_Out_Y_Val(a4)
		jsr	Check_GlobalRout
		move.l	#Mover_Move_Y_Bit,Mover_Move_Routine(a4)
		move.b	#20,Mover_Y_Wait_Time(a4)

YROUTGLOBAL		*--*>Init_Up or DOWN
		*--Test Bits Down
		move	Bob_X_Position(a4),d0
		move	Bob_Y_Position(a4),d1
		add	#16,d0
		add	#16,d1
		jsr	Get_Block_Flags
		swap	d0
		*--Test auf STOPBITS
		btst	#SCR_EFFECT_BIT,d0
		beq	.Init_Mover_DOWN
.Init_Mover_UP	*--Bits Down -> Mover Up
		bset.b	#UP_BIT,Mover_XY_Dirs(a4)
		bset.b	#UP_BIT,Mover_XY_NextDirs(a4)
		rts
.Init_Mover_DOWN	*--Bits Up -> Mover Down
		bset.b	#DOWN_BIT,Mover_XY_Dirs(a4)
		bset.b	#DOWN_BIT,Mover_XY_NextDirs(a4)
		rts
**************************************************************************************
I_Mover_X_Rout_1_W	*--*>Init Values for MoverYRout
		move.w	#600,Bob_Out_X_Val(a4)
		jsr	Check_GlobalRout
		move.l	#Mover_Move_X_Bit,Mover_Move_Routine(a4)
		move.b	#121,Mover_X_Wait_Time(a4)
		*--*>Init Left or Right
		*--Test Bits Right
		move	Bob_X_Position(a4),d0
		move	Bob_Y_Position(a4),d1
		add	#4*16,d0
		jsr	Get_Block_Flags
		swap	d0
		*--Test auf STOPBIT
		btst	#SCR_EFFECT_BIT,d0
		beq	.Init_Mover_RIGHT
.Init_Mover_LEFT	*--Bits Right -> Mover Left
		bset.b	#LEFT_BIT,Mover_XY_Dirs(a4)
		bset.b	#LEFT_BIT,Mover_XY_NextDirs(a4)
		rts
.Init_Mover_RIGHT	*--Bits Left -> Mover Right
		bset.b	#RIGHT_BIT,Mover_XY_Dirs(a4)
		bset.b	#RIGHT_BIT,Mover_XY_NextDirs(a4)
		rts
*-------------------------------------------------------------------------------------
I_Mover_X_Rout_1_M	*--*>Init Values for MoverYRout
		move.w	#600,Bob_Out_X_Val(a4)
		jsr	Check_GlobalRout
		move.l	#Mover_Move_X_Bit,Mover_Move_Routine(a4)
		move.b	#20,Mover_X_Wait_Time(a4)
		*--*>Init Left or Right
		*--Test Bits Right
		move	Bob_X_Position(a4),d0
		move	Bob_Y_Position(a4),d1
		add	#4*16,d0
		jsr	Get_Block_Flags
		swap	d0
		*--Test auf STOPBIT
		btst	#SCR_EFFECT_BIT,d0
		beq	.Init_Mover_RIGHT
.Init_Mover_LEFT	*--Bits Right -> Mover Left
		bset.b	#LEFT_BIT,Mover_XY_Dirs(a4)
		bset.b	#LEFT_BIT,Mover_XY_NextDirs(a4)
		rts
.Init_Mover_RIGHT	*--Bits Left -> Mover Right
		bset.b	#RIGHT_BIT,Mover_XY_Dirs(a4)
		bset.b	#RIGHT_BIT,Mover_XY_NextDirs(a4)
		rts
**************************************************************************************
*-------------------------------------------------------------------------------------
Test_TEMET_On_Top_S	*--*>Test if Temet is on Top or not
		lea	WorkRam,a2
		tst.b	Dead(a6)
		beq.s	.OKAY
		bra	.ClearKolli_DEAD
.OKAY		*--Test if TEMET already on Top
		tst.b	Mover_TEMET_On(a4)
		beq.s	.Test_Temet_Now_Top
		*--Test if TEMET isnt on Top any more
		jsr	KollTopBobX_W
		*--Auswerten
		tst	d7
		bmi	.ClearKolli_NORM
		bra.s	.TestJumpUp
.Test_Temet_Now_Top	*--Test Now on Top
		jsr	KollTopBobTestMover_W
		*--Test Temet Y Dir
		tst	TEMET_Dir_Y(a2)
		bpl.s	.DownTemet
		*--Test Mover Y Dir /Falls Runter keine Kolli
		btst.b	#DOWN_BIT,Mover_XY_Dirs(a4)
		bne	.NoKolli
		*--Temet Up-> Nur Kolly wenn Mover Y Speed > Temet Y Speed
		tst.b	Mover_Y_Wait_Time(a4)
		bmi.s	.DownTemet
		beq.s	.DownTemet
		tst.b	Move_Y_Speed(a4)
		beq	.NoKolli
.DownTemet	*--Auswerten
		tst	d7
		bmi	.NoKolli

		*--Test if WaitTime runtersetzen
		tst.b	Mover_X_Wait_Time(a4)
		beq.s	.TestYWT
		bmi.s	.TestYWT
		move.b	#10,Mover_X_Wait_Time(a4)
.TestYWT		tst.b	Mover_Y_Wait_Time(a4)
		beq.s	.TestJumpUp
		bmi.s	.TestJumpUp
		move.b	#10,Mover_Y_Wait_Time(a4)
.TestJumpUp	*--Test Jump
		clr.w	TEMET_FLASH_JUMPER(a2)
		cmp	#3,TEMET_Shield_Flag(a2)
		bne.s	.noFlashNormTest
		tst	GlobalJoyFire(a6)
		bne	.ClearKolli_NORM
		bra.s	.FurtherOn
.noFlashNormTest	tst.b	TEMET_Joy_Y_Dir(a2)
		bmi	.ClearKolli_NORM
.FurtherOn	*--Test if TEMET first Time on Top
		tst.b	Mover_TEMET_On(a4)
		bne.s	.NoClrXSpeed
		*--Slow Down X
		move	TEMET_Speed_X(a2),d0
		asr	#1,d0
		move	d0,TEMET_Speed_X(a2)
.NoClrXSpeed	*--INIT TEMET ON TOP
		move.b	#1,Mover_TEMET_On(a4)
		move.l	#LUFT__,TEMET_Save_a1(a2)
		move.w	#8,TEMET_Save_X_d2(a2)
		move.w	#1,TEMET_KollisionFlag(a2)
		move.w	#2,TEMET_New_Calc_Flag(a2)
		move	#MOVER,TEMET_Status(a2)
		clr.w	TEMET_Speed_Y(a2)
.Test_Mover_Left	*--Mover_Nach_links ?
		btst.b	#LEFT_BIT,Mover_XY_Dirs(a4)
		beq.s	.Test_Mover_Right
		*--move Left
		moveq	#0,d1
		move.b	Move_X_Speed(a4),d1
		sub	d1,TEMET_X_Position(a2)
		tst	TEMET_Speed_X(a2)
		bne.s	.Make_Y_Koord
		move	#1,TEMET_Speed_X(a2)
		bra.s	.Make_Y_Koord
.Test_Mover_Right	*--Mover_Nach_links ?
		btst.b	#RIGHT_BIT,Mover_XY_Dirs(a4)
		beq.s	.Make_Y_Koord
		*--move Right
		moveq	#0,d1
		move.b	Move_X_Speed(a4),d1
		add	d1,TEMET_X_Position(a2)
		tst	TEMET_Speed_X(a2)
		bne.s	.Make_Y_Koord
		move	#-1,TEMET_Speed_X(a2)
.Make_Y_Koord	*--Y Koordinate machen
		move	Bob_Y_Position(a4),d1
		add	Bob_Y_Offset(a4),d1
		sub	TEMET_Y_Foot_Offset(a2),d1
		move	d1,TEMET_Y_Position(a2)
.Test_Mover_Down	*--Mover_Nach_unten ?
		btst.b	#DOWN_BIT,Mover_XY_Dirs(a4)
		beq.s	.Test_Mover_Up
		*--move Down
		subq	#1,TEMET_Y_Position(a2)
		move.w	#$0100,TEMET_Speed_Y(a2)
		bra.s	.NoKolli
.Test_Mover_Up	*--Mover_Nach_unten ?
		btst.b	#UP_BIT,Mover_XY_Dirs(a4)
		beq.s	.NoKolli
		*--move Up
		addq	#1,TEMET_Y_Position(a2)
		move	#$ff00,TEMET_Speed_Y(a2)
.NoKolli		*--Normal End
		rts
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*- - - - - - -	CLEAR KOLLISIONS
.ClearKolli_DEAD
		*--Clear Kollision
		clr.b	Mover_TEMET_On(a4)
		rts
.ClearKolli_UP	*--Clear Kollision
		subq	#3,TEMET_Y_Position(a2)
		clr.b	Mover_TEMET_On(a4)
		move	#FALLEN,TEMET_Status(a2)
		bra.s	.AddTestX
		rts
.ClearKolli_NORM	;--Clear Kollision because of Jump
		lea	WorkRam,a2
		subq	#3,TEMET_Y_Position(a2)
		clr.b	Mover_TEMET_On(a4)
	 	clr.w	TEMET_JumpHight(a2)
		clr.w	TEMET_Speed_Y(a2)
		clr.w	TEMET_KollisionFlag(a2)
		clr.w	TEMET_New_Calc_Flag(a2)
		move	#-1,TEMET_Dir_Y(a2)
		move	#SPRINGEN,TEMET_Status(a2)
		jsr	Test_TEMET_Jump
		move.b	#-6,TEMET_Speed_Y(a2)
		
.AddTestX	*--Add Test X
		move.b	Move_X_Speed(a4),d0
		btst.b	#RIGHT_BIT,Mover_XY_Dirs(a4)
		bne.s	.AddSpeedX
		neg.b	d0
.AddSpeedX	add.b	d0,TEMET_Speed_X(a2)
		rts
*-------------------------------------------------------------------------------------
*-------------------------------------------------------------------------------------
Test_TEMET_On_Top	*--*>Test if Temet is on Top or not
		lea	WorkRam,a2
		tst.b	Dead(a6)
		beq.s	.OKAY
		bra	.ClearKolli_DEAD
.OKAY		*--Test if TEMET already on Top
		tst.b	Mover_TEMET_On(a4)
		beq.s	.Test_Temet_Now_Top
		*--Test if TEMET isnt on Top any more
		jsr	KollTopBobX
		*--Auswerten
		tst	d7
		bmi	.ClearKolli_NORM
		bra.s	.TestJumpUp
.Test_Temet_Now_Top	*--Test Now on Top
		lea	WorkRam,a2
		jsr	KollTopBobTestMover
		*--Test Temet Y Dir
		lea	WorkRam,a2
		tst	TEMET_Dir_Y(a2)
		bpl.s	.DownTemet
		*--Test Mover Y Dir /Falls Runter keine Kolli
		btst.b	#DOWN_BIT,Mover_XY_Dirs(a4)
		bne	.NoKolli
		*--Temet Up-> Nur Kolly wenn Mover Y Speed > Temet Y Speed
		tst.b	Mover_Y_Wait_Time(a4)
		bmi.s	.DownTemet
		beq.s	.DownTemet
		tst.b	Move_Y_Speed(a4)
		beq	.NoKolli
.DownTemet		*--Auswerten
		tst	d7
		bmi	.NoKolli
		*--Test if WaitTime runtersetzen
		tst.b	Mover_X_Wait_Time(a4)
		beq.s	.TestYWT
		bmi.s	.TestYWT
		move.b	#10,Mover_X_Wait_Time(a4)
.TestYWT		tst.b	Mover_Y_Wait_Time(a4)
		beq.s	.TestJumpUp
		bmi.s	.TestJumpUp
		move.b	#10,Mover_Y_Wait_Time(a4)
.TestJumpUp		*--Test Jump
		clr.w	TEMET_FLASH_JUMPER(a2)
		cmp	#3,TEMET_Shield_Flag(a2)
		bne.s	.noFlashNormTest
		tst	GlobalJoyFire(a6)
		bne	.ClearKolli_JUMP
		bra.s	.FurtherOn
.noFlashNormTest	tst.b	TEMET_Joy_Y_Dir(a2)
		bmi	.ClearKolli_JUMP
.FurtherOn		*--Test if TEMET first Time on Top
		tst.b	Mover_TEMET_On(a4)
		bne.s	.NoClrXSpeed
		*--Slow Down X
		move	TEMET_Speed_X(a2),d0
		asr	#1,d0
		move	d0,TEMET_Speed_X(a2)
.NoClrXSpeed	*--INIT TEMET ON TOP
		move.b	#1,Mover_TEMET_On(a4)
		move.l	#LUFT__,TEMET_Save_a1(a2)
		move.w	#8,TEMET_Save_X_d2(a2)
		move.w	#1,TEMET_KollisionFlag(a2)
		move.w	#2,TEMET_New_Calc_Flag(a2)
		move	#MOVER,TEMET_Status(a2)
		clr.w	TEMET_Speed_Y(a2)
.Test_Mover_Left	*--Mover_Nach_links ?
		btst.b	#LEFT_BIT,Mover_XY_Dirs(a4)
		beq.s	.Test_Mover_Right
		*--move Left
		moveq	#0,d1
		move.b	Move_X_Speed(a4),d1
		sub	d1,TEMET_X_Position(a2)
		tst	TEMET_Speed_X(a2)
		bne.s	.Make_Y_Koord
		move	#1,TEMET_Speed_X(a2)
		bra.s	.Make_Y_Koord
.Test_Mover_Right	*--Mover_Nach_links ?
		btst.b	#RIGHT_BIT,Mover_XY_Dirs(a4)
		beq.s	.Make_Y_Koord
		*--move Right
		moveq	#0,d1
		move.b	Move_X_Speed(a4),d1
		add	d1,TEMET_X_Position(a2)
		tst	TEMET_Speed_X(a2)
		bne.s	.Make_Y_Koord
		move	#-1,TEMET_Speed_X(a2)
.Make_Y_Koord	*--Y Koordinate machen
		move	Bob_Y_Position(a4),d1
		add	Bob_Y_Offset(a4),d1
		sub	TEMET_Y_Foot_Offset(a2),d1
		move	d1,TEMET_Y_Position(a2)
.Test_Mover_Down	*--Mover_Nach_unten ?
		btst.b	#DOWN_BIT,Mover_XY_Dirs(a4)
		beq.s	.Test_Mover_Up
		*--move Down
		subq	#1,TEMET_Y_Position(a2)
		move.w	#$0100,TEMET_Speed_Y(a2)
		bra.s	.NoKolli
.Test_Mover_Up	*--Mover_Nach_unten ?
		btst.b	#UP_BIT,Mover_XY_Dirs(a4)
		beq.s	.NoKolli
		*--move Up
		addq	#1,TEMET_Y_Position(a2)
		move	#$ff00,TEMET_Speed_Y(a2)
.NoKolli		*--Normal End
		rts
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*- - - - - - -	CLEAR KOLLISIONS
.ClearKolli_DEAD
		*--Clear Kollision
		clr.b	Mover_TEMET_On(a4)
		rts
.ClearKolli_NORM	*--Clear Kollision
		clr.b	Mover_TEMET_On(a4)
		move	#FALLEN,TEMET_Status(a2)
		bra.s	.AddTestX
		rts
.ClearKolli_JUMP	;--Clear Kollision because of Jump

		lea	WorkRam,a2
		clr.b	Mover_TEMET_On(a4)
		subq	#3,TEMET_Y_Position(a2)
		move.w	#1,TEMET_KollisionFlag(a2)
		clr.w	TEMET_New_Calc_Flag(a2)
	 	clr.w	TEMET_JumpHight(a2)
		move	#SPRINGEN,TEMET_Status(a2)
		move.b	#-1,TEMET_Joy_Y_Dir(a6)
		jsr	Test_TEMET_Jump
		add	#$0080,TEMET_Speed_Y(a2)

		;move	TEMET_AnfJumpSpeedB(a2),d1
		;sub	d1,TEMET_Speed_Y(a2)
		*--Add Test Y
		move.b	Move_Y_Speed(a4),d0
		asr.b	#1,d0
		btst.b	#DOWN_BIT,Mover_XY_Dirs(a4)
		bne.s	.AddSpeedY
		neg.b	d0
.AddSpeedY	add.b	d0,TEMET_Speed_Y(a2)

.AddTestX	*--Add Test X
		move.b	Move_X_Speed(a4),d0
		btst.b	#RIGHT_BIT,Mover_XY_Dirs(a4)
		bne.s	.AddSpeedX
		neg.b	d0
.AddSpeedX	add.b	d0,TEMET_Speed_X(a2)
		rts
*-------------------------------------------------------------------------------------
*-------------------------------------------------------------------------------------
*- - - - - - - - - - - - - - - - - - - - - - -
Mover_Move_Y_Bit	*--*>MOVE and test STOP/REVERSE BITS
		*--Test Warten
		tst.b	Mover_Y_Wait_Time(a4)
		beq.s	.TestOffset
		bmi.s	.TestOffset
.Wait		*--Warten
		cmp.b	#121,Mover_Y_Wait_Time(a4)
		bne.s	.NoBack
		rts
.NoBack		subq.b	#1,Mover_Y_Wait_Time(a4)
		tst.b	Mover_Y_Wait_Time(a4)
		beq.s	.StartMove
		*--GoBack
		rts
.StartMove	*--Moven Initialiesieren
		move.b	Mover_XY_NextDirs(a4),Mover_XY_Dirs(a4)
		move	#ACCETAB,Mover_Y_Offset(a4)
.TestOffset	*--Test Bremsen Beschleunigen
		lea	MoverSpeedTab,a0
		move	Mover_Y_Offset(a4),d0
		cmp	#ACCEEND,(a0,d0)
		beq.s	.TestDir
		cmp	#STOPEND,(a0,d0)
		bne.s	.AddCounter
		*--Init WaitTimer
		move.b	#80,Mover_Y_Wait_Time(a4)
		*--GoBack
		rts
.AddCounter	*--Add Y-Offset Counter
		addq	#2,Mover_Y_Offset(a4)
		*--Test in welche Richtung Moven
		lea	MoverSpeedTab,a0
		move	Mover_Y_Offset(a4),d0
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
.TestDir		*--Test Move Down
		btst.b	#DOWN_BIT,Mover_XY_Dirs(a4)
		beq	.TestUp
.Down		*--Get Down Move Val and Test if go to 16ner Pos or Move Old
		move	(a0,d0),d1
		tst	d1
		beq.s	.Test16PosDown
		bmi.s	.DownOld
		move.b	d1,Move_Y_Speed(a4)
.DownOld		moveq	#0,d1
		move.b	Move_Y_Speed(a4),d1
		add	d1,Bob_Y_Position(a4)
		*--Test normal Vals
		tst	(a0,d0)
		bpl	.GoBACK
.TestBitsDown	*--Teste ob Bits bereits gefunden
		tst.b	Mover_Y_Wait_Time(a4)
		bmi	.GoBACK
		*--Test Stop
		move	Bob_X_Position(a4),d0
		move	Bob_Y_Position(a4),d1
		add	#16,d0
		add	#16,d1
		jsr	Get_Block_Flags
		swap	d0
		*--Test auf STOPBITS
		btst	#SCR_EFFECT_BIT,d0
		beq	.GoBACK

		move	Bob_X_Position(a4),d0
		move	Bob_Y_Position(a4),d1
		add	#16,d0
		add	#32,d1
		jsr	Get_Block_Flags
		swap	d0
		btst	#SCR_EFFECT_BIT,d0
		beq	.NoDirChangeDown
		*--Change Dir to UP
		bclr.b	#DOWN_BIT,Mover_XY_NextDirs(a4)
		bset.b	#UP_BIT,Mover_XY_NextDirs(a4)
.NoDirChangeDown	move	#STOPTAB,Mover_Y_Offset(a4)
		move.b	#-1,Mover_Y_Wait_Time(a4)
		bra	.GoBACK
.Test16PosDown	*--16ner Position schon erreicht ?
		clr.b	Move_Y_Speed(a4)
		move	Bob_Y_Position(a4),d1
		and	#%0000000000001111,d1
		tst	d1
		beq	.GoBACK
		addq	#1,Bob_Y_Position(a4)
		bra	.GoBACK
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
.TestUp		*--Test Move Up
		btst.b	#UP_BIT,Mover_XY_Dirs(a4)
		beq	.GoBACK
.Up		*--Get UP Move Val and Test if go to 16ner Pos or Move Old
		move	(a0,d0),d1
		tst	d1
		beq.s	.Test16PosUp
		bmi.s	.UpOld
		move.b	d1,Move_Y_Speed(a4)
.UpOld		moveq	#0,d1
		move.b	Move_Y_Speed(a4),d1
		sub	d1,Bob_Y_Position(a4)
		*--Test normal Vals
		tst	(a0,d0)
		bpl	.GoBACK
.TestBitsUp	*--Teste ob Bits bereits gefunden
		tst.b	Mover_Y_Wait_Time(a4)
		bmi	.GoBACK
		*--Test Stop
		move	Bob_X_Position(a4),d0
		move	Bob_Y_Position(a4),d1
		add	#16,d0
		jsr	Get_Block_Flags
		swap	d0
		*--Test auf STOPBITS
		btst	#SCR_EFFECT_BIT,d0
		beq	.GoBACK		;Wenn Bit nicht gesetzt

		move	Bob_X_Position(a4),d0
		move	Bob_Y_Position(a4),d1
		add	#16,d0
		sub	#16,d1
		jsr	Get_Block_Flags
		swap	d0

		btst	#SCR_EFFECT_BIT,d0
		beq	.NoDirChangeUp
		*--Change Dir to Down
		bclr.b	#UP_BIT,Mover_XY_NextDirs(a4)
		bset.b	#DOWN_BIT,Mover_XY_NextDirs(a4)
.NoDirChangeUp	move	#STOPTAB,Mover_Y_Offset(a4)
		move.b	#-1,Mover_Y_Wait_Time(a4)
		bra	.GoBACK
.Test16PosUp	*--16ner Grenze schon erreicht
		clr.b	Move_Y_Speed(a4)
		move	Bob_Y_Position(a4),d1
		and	#%0000000000001111,d1
		tst	d1
		beq	.GoBACK
		subq	#1,Bob_Y_Position(a4)
		;bra.s	.GoBACK
.GoBACK		*--GO BACK
		rts
*-------------------------------------------------------------------------------------
Mover_Move_X_Bit	*--*>Move X with STOP/REVERSE BITS
		*--Test Warten
		tst.b	Mover_X_Wait_Time(a4)
		beq	.TestOffset
		bmi	.TestOffset
.Wait		*--Warten
		cmp.b	#121,Mover_X_Wait_Time(a4)
		bne.s	.NoBack
		rts
.NoBack		subq.b	#1,Mover_X_Wait_Time(a4)
		tst.b	Mover_X_Wait_Time(a4)
		beq.s	.InitMove
		bra	.GoBACK
.InitMove		*--Init moven
		move.b	Mover_XY_NextDirs(a4),Mover_XY_Dirs(a4)
		move	#ACCETABX,Mover_X_Offset(a4)
.TestOffset	*--Test Bremsen Beschleunigen
		lea	MoverSpeedTab,a0
		move	Mover_X_Offset(a4),d0
		cmp	#ACCEEND,(a0,d0)
		beq.s	.TestDir
		cmp	#STOPEND,(a0,d0)
		bne.s	.Add_X_Offset
		*--SetWait wenn Stop fertig
		move.b	#80,Mover_X_Wait_Time(a4)
		bra	.GoBACK
.Add_X_Offset	*--Add +2 to X OFFSET
		addq	#2,Mover_X_Offset(a4)
		*--Test Moven in welche Richtung
		lea	MoverSpeedTab,a0
		move	Mover_X_Offset(a4),d0
.TestDir		*--Test Right ?
		btst.b	#RIGHT_BIT,Mover_XY_Dirs(a4)
		beq	.Test_Left
		*--Move RIGHT
		move	(a0,d0),d1
		tst	d1
		beq.s	.Test16PosRight
		bmi.s	.RightOld
		move.b	d1,Move_X_Speed(a4)
.RightOld		moveq	#0,d1
		move.b	Move_X_Speed(a4),d1
		add	d1,Bob_X_Position(a4)
		tst	(a0,d0)
		bpl	.GoBACK
.TestBitsRight	*--Teste ob Bits bereits gefunden
		tst.b	Mover_X_Wait_Time(a4)
		bmi	.GoBACK
		*--Test Stop
		move	Bob_X_Position(a4),d0
		move	Bob_Y_Position(a4),d1
		add	#4*16,d0
		jsr	Get_Block_Flags
		swap	d0
		*--Test auf STOPBIT
		btst	#SCR_EFFECT_BIT,d0
		beq	.GoBACK	;Wenn Bit nicht gesetzt

		move	Bob_X_Position(a4),d0
		move	Bob_Y_Position(a4),d1
		add	#5*16,d0
		jsr	Get_Block_Flags
		swap	d0

		btst	#SCR_EFFECT_BIT,d0
		beq	.NoDirChangeRight
		*--Change Dir into LEft
		bclr.b	#RIGHT_BIT,Mover_XY_NextDirs(a4)
		bset.b	#LEFT_BIT,Mover_XY_NextDirs(a4)
.NoDirChangeRight	move	#STOPTABX,Mover_X_Offset(a4)
		move.b	#-1,Mover_X_Wait_Time(a4)
		bra	.GoBACK
.Test16PosRight	*--16nerPos erreicht ??
		clr.b	Move_X_Speed(a4)
		move	Bob_X_Position(a4),d1
		and	#%0000000000001111,d1
		tst	d1
		beq	.GoBACK
		addq	#1,Bob_X_Position(a4)
		move.b	#1,Move_X_Speed(a4)
		bra	.GoBACK
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
.Test_Left	*--Test Left ?
		btst.b	#LEFT_BIT,Mover_XY_Dirs(a4)
		beq	.GoBACK
.Left		*--Hole MoveWert und Move
		move	(a0,d0),d1
		tst	d1
		beq.s	.Test16PosLeft
		bmi.s	.LeftOld
		move.b	d1,Move_X_Speed(a4)
.LeftOld		moveq	#0,d1
		move.b	Move_X_Speed(a4),d1
		sub	d1,Bob_X_Position(a4)
		tst	(a0,d0)
		bpl	.GoBACK
.TestBitsLeft	*--Teste ob Bits bereits gefunden
		tst.b	Mover_X_Wait_Time(a4)
		bmi	.GoBACK
		*--Test Stop
		move	Bob_X_Position(a4),d0
		move	Bob_Y_Position(a4),d1
		jsr	Get_Block_Flags
		swap	d0
		*--Test auf STOP BIT
		btst	#SCR_EFFECT_BIT,d0
		beq	.GoBACK	;Wenn Bit nicht gesetzt

		move	Bob_X_Position(a4),d0
		move	Bob_Y_Position(a4),d1
		sub	#16,d0
		jsr	Get_Block_Flags
		swap	d0

		btst	#SCR_EFFECT_BIT,d0
		beq	.NoDirChangeLeft
		*--CHANGE DIR INTO RIGHT
		bclr.b	#LEFT_BIT,Mover_XY_NextDirs(a4)
		bset.b	#RIGHT_BIT,Mover_XY_NextDirs(a4)
.NoDirChangeLeft	move	#STOPTABX,Mover_X_Offset(a4)
		move.b	#-1,Mover_X_Wait_Time(a4)
		bra	.GoBACK
.Test16PosLeft	*--16nerPos erreicht ??
		clr.b	Move_X_Speed(a4)
		move	Bob_X_Position(a4),d1
		and	#%0000000000001111,d1
		tst	d1
		beq	.GoBACK
		subq	#1,Bob_X_Position(a4)
		move.b	#1,Move_X_Speed(a4)
		;bra.s	.GoBACK
.GoBACK		*--GO BACK
		rts
*-------------------------------------------------------------------------------------
ACCEEND		=	-1
STOPEND		=	-2
*-------------------------------------------------------------------------------------
MoverSpeedTab	dc.w	1,1,2,2,3,3,4,4,ACCEEND
MoverStopTab	dc.w	4,3,2,1,0,0,0,0,0,0,0,0,STOPEND
ACCETAB		=	0
STOPTAB		=MoverStopTab-MoverSpeedTab
MoverSpeedTabX	dc.w	1,1,2,2,3,3,ACCEEND
MoverStopTabX	dc.w	3,3,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,STOPEND
ACCETABX		=MoverSpeedTabX-MoverSpeedTab
STOPTABX		=MoverStopTabX-MoverSpeedTab
*-------------------------------------------------------------------------------------
*-------------------------------------------------------------------------------------
*- - - - - - - - - - - - - - - - - - - - - - - - - -
JumpTabMover	dc.w	0,-100
JumpTab_Anf		dc.w	1,3,5,6,7,7,8,8,8,7,7,6,5,3,1,0,0,-1,-1,-2,-2,-2,-1,-1,0,0,1,1,2,2,3,-100
JumpTab_End		dc.w	1,-1,-3,-5,-7,-8,-9,-9,-10,-10,-10,-9,-9,-8,-7,-5,-3,-1,1,2,2,3,3,3,2,2,1,1,1,0,-100
WAIT_JUMP		=	0
WM_JUMP_ANF		=	JumpTab_Anf-JumpTabMover
WM_JUMP_END		=	JumpTab_End-JumpTabMover
*-------------------------------------------------------------------------------------
Move_With_Water	*--*>Test Set Mover to WaterY
		tst.b	Mover_Set_To_Water(a4)
		bne.s	.NoSetToWater
		*--Set To Water
		move	Water_YPos(a6),d0
		move	d0,Bob_Y_Position(a4)
		sub	#MOVER_WATER_SUB,Bob_Y_Position(a4)
		*--Test Y OffsetTable
		lea	JumpTabMover,a0
		move	Mover_Y_Offset(a4),d0
		cmp	#-100,2(a0,d0)
		beq.s	.NoAddY
		addq	#2,Mover_Y_Offset(a4)
.NoAddY		move	(a0,d0),d1
		add	d1,Bob_Y_Position(a4)
.NoSetToWater	rts
*-------------------------------------------------------------------------------------
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Mover_Water		*--*>Test Set Mover to WaterY
		lea	(a6),a2
		tst.b	Mover_Set_To_Water(a4)
		bne.s	.NoSetToWater
		*--*>Test if Temet is in Fontne
		tst	TEMET_in_Fontne(a2)
		beq.s	.No_In_Font
		bra.s	.No_In_Font
		*--In Fontne
		move.b	#1,Mover_Set_To_Water(a4)
		move	#$ffff,Mover_WY_Speed(a4)
		bra.s	.NoSetToWater
.No_In_Font		*--Set To Water
		move	Water_YPos(a6),d0
		move	d0,Bob_Y_Position(a4)
		sub	#MOVER_WATER_SUB,Bob_Y_Position(a4)
		*--Test Y OffsetTable
		lea	JumpTabMover,a0
		move	Mover_Y_Offset(a4),d0
		cmp	#-100,2(a0,d0)
		beq.s	.NoAddY
		addq	#2,Mover_Y_Offset(a4)
.NoAddY		move	(a0,d0),d1
		add	d1,Bob_Y_Position(a4)
		bra	.MOVE

*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
.NoSetToWater	*--*>Test if Temet is Still in 
		bra	.MOVE

		tst	TEMET_in_Fontne(a2)
		beq.s	.Not_more_In_Font
		sub	#$0100,Mover_WY_Speed(a4)
		move.b	Mover_WY_Speed(a4),d0
		move.b	d0,Move_Y_Speed(a4)
		ext.w	d0
		add	d0,Bob_Y_Position(a4)
		bra.s	.MakeDirBits
.Not_more_In_Font	*--*>Beschl down and Test if in Water
		add	#$0050,Mover_WY_Speed(a4)
		move.b	Mover_WY_Speed(a4),d0
		move.b	d0,Move_Y_Speed(a4)
		ext.w	d0
		add	d0,Bob_Y_Position(a4)
		move	Water_YPos(a6),d0
		sub	Bob_Y_Position(a4),d0
		sub	#MOVER_WATER_SUB,d0
		bpl.s	.MakeDirBits
		*--Clr Jumpen
		clr.b	Move_Y_Speed(a4)
		clr.b	Mover_Set_To_Water(a4)
		move	#WM_JUMP_ANF,Mover_Y_Offset(a4)
		bra.s	.MOVE
.MakeDirBits	*--Test Max Y Speed
		move.b	Mover_WY_Speed(a4),d0
		tst.b	d0
		bpl.s	.Test_Pos
.Test_neg		neg.b	d0
		cmp.b	#8,d0
		bls.s	.NoChange
		move.b	#-8,d0
		move.b	d0,Mover_WY_Speed(a4)
		bra.s	.NoChange
.Test_Pos		cmp.b	#8,d0
		bls.s	.NoChange
		move.b	#8,d0
		move.b	d0,Mover_WY_Speed(a4)
.NoChange		*--Make Dir YBits
		tst.b	Move_Y_Speed(a4)
		bpl.s	.DownBits
.UpBits		bclr.b	#DOWN_BIT,Mover_XY_NextDirs(a4)
		bset.b	#UP_BIT,Mover_XY_NextDirs(a4)
		bra.s	.MOVE
.DownBits		bclr.b	#UP_BIT,Mover_XY_NextDirs(a4)
		bset.b	#DOWN_BIT,Mover_XY_NextDirs(a4)

*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
.MOVE		bra	Mover_Move_X_Bit

**************************************************************************************
**************************************************************************************
*---------------------------------------------------------------------------
*---------	Kollision Top WOLKEN
*---------------------------------------------------------------------------
LEFT_TOLERANZ_W=6
RIGHT_TOLERANZ_W=12
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
KollTopBobTestMover_W
		*--*>Mover Einsprung in KollTopBopTestRoutine
		moveq	#-2,d7
		cmp	#FLIEGEN,TEMET_Status(a2)
		bne.s	.KollTopBob2
		*--Make Fly Koords
		tst	TEMET_New_Calc_Flag(a2)
		beq.s	.OkGoToTest
		rts
.OkGoToTest	move	TEMET_X_Position(a2),d0
		move	TEMET_Y_Position(a2),d1
		add	#16,d0
		add	#45,d1
		bra.s	.MoverEinspr
.KollTopBob2
		move	TEMET_X_PLUS_OFFS(a2),d0
		move	TEMET_Y_PLUS_OFFS(a2),d1
.MoverEinspr	sub	Bob_X_Offset(a4),d0
		sub	Bob_Y_Offset(a4),d1
		sub	Bob_X_Position(a4),d0
		sub	Bob_Y_Position(a4),d1


		;TEMET noch ber Anim ?
		tst	d1
		bmi	.Back

*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
.MoverTest	*--*>Mover Toleranz !
		moveq	#-1,d7
		cmp	#12,d1
		bhi.s	.Back

		;TEMET links von Anim
		add	#LEFT_TOLERANZ_M,d0
		tst	d0
		bmi.s	.Back
		;TEMET zu weit rechts ?
		sub	#RIGHT_TOLERANZ_M,d0
		tst	d0
		bpl.s	.ok2
		moveq	#0,d0
.ok2		cmp	Bob_Width(a4),d0
		bhi.s	.Back


.MoverIn2		;Kollision Flag On
		tst.b	TEMET_PUNCH_FLAG(a2)
		beq.s	.NoSeTFlag
		move.b	#1,TEMET_PUNCH_FLAG+1(a2)
.NoSeTFlag	moveq	#1,d7
		;TEMET Y Pos Korrigieren
		sub	d1,TEMET_Y_Position(a2)
		move	d1,d5
		*--*>Testen ob timet in y koll drinist
		move	TEMET_X_Position(a2),d0
		add       #16,d0
		move	TEMET_Y_Position(a2),d1
		jsr	Get_Block_Flags
		*--Test if Y Kolli is allowed
		swap	d0
		btst	#SCR_KOLLISION_BIT,d0
		beq	.Back
		add	d5,TEMET_Y_Position(a2)
		
.Back		rts

*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
KollTopBobX_W	;Kollision Flag auf"OFF"
		moveq	#-1,d7
		move	TEMET_X_PLUS_OFFS(a2),d0
		move	TEMET_Y_PLUS_OFFS(a2),d1
		sub	Bob_X_Position(a4),d0
		sub	Bob_X_Offset(a4),d0
		sub	Bob_Y_Position(a4),d1
		sub	Bob_Y_Offset(a4),d1

		;TEMET links von Anim
		add	#LEFT_TOLERANZ_W,d0
		tst	d0
		bmi.s	.Back
		;TEMET zu weit rechts ?
		sub	#RIGHT_TOLERANZ_W,d0
		tst	d0
		bpl.s	.ok
		moveq	#0,d0
.ok		cmp	Bob_Width(a4),d0
		bhi.s	.Back

		;Kollision Flag On
		moveq	#1,d7
.Back		rts

**************************************************************************************
*-------------------------------------------------------------------------------------
*-------------	BOX GLOBAL
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------------------
Box_Damage_Anm	=Bob_Koords_Save1	;LW
Box_Damage_EnterRout1	=Bob_Koords_Save2	;LW
Box_Damage_EnterRout2	=Bob_Special_3	;LW
Box_Show_Rout	=Bob_Special_1	;LW
Box_DamTab_Adr	=Bob_Plane_Order	;LW
*-------------------------------------------------------------------------------------
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Box_Gem_Rout_Dam:	*--*>Austragen Testen
		move.l	#Area_Enter_Vector+WorkRam,Bob_Entry_Adress(a4)
		jsr	Standart_BobAnim
		jsr	Test_Bob_Out
		move.l	Box_Show_Rout(a4),a0
		jsr	(a0)
		rts
Box_Gem_Rout:	*--*>Standart Rout
		jsr	Standart_BobAnim
		jsr	Test_Bob_Out
		lea	WorkRam,a2
		jsr	KollTopBobTest
		tst	d7
		bmi 	.NoOpen
		*--*>Damage Box
		jsr	Make_Bump
		*--*>Box_Damage
		move.l	#Box_Gem_Rout_Dam,Bob_Routine(a4)
		move.l	Box_Damage_Anm(a4),Bob_Next_Anim(a4)
		clr.w	Bob_Anim_Delay(a4)
		moveq	#0,d3
		moveq	#-2,d4
		jsr	ENTER_SMOKE_X_Offs
		moveq	#0,d3
		moveq	#-2,d4
		jsr	ENTER_SMOKE_Y_Offs
		jsr	ENTER_Box_D
		IFEQ	SOUNDFX
		moveq	#11,d0
		jsr	TFMX+16
		ENDC
		*--*>ENTER GEMS
		move.l	Box_Damage_EnterRout1(a4),a0
		jsr	(a0)
		move.l	Box_Damage_EnterRout2(a4),a0
		jsr	(a0)
.NoOpen		move.l	Box_Show_Rout(a4),a0
		jsr	(a0)
		rts
*-------------------------------------------------------------------------
Enter_Ghosten	*--*>ENTER GHOST
		*--get one Entrys
		moveq	#1,d0
		jsr	Get_Entry_Adrs_HI
		tst	d0
		bne	.NoEntry_Found

		*--*>Enter GHOST
		move.l	a4,a5
		lea	Area_Enter_Vector(a6),a1
		lea	ENTRY_ADRS(a6),a0
		*--ENTER GEM LEft
		move	#S_GHOST,d0
		move	Bob_X_Position(a5),d1
		sub	#16,d1
		move	Bob_Y_Position(a5),d2
		move.l	(a0),a4
		jsr	ENTER_BOB
		*--*>Init Rout
		move.l	#Ghost_Up_Rout,Bob_Routine(a4)
		move.b	#70,Ghost_Rout_Time(a4)
		move.b	#25,Ghost_Blink_Time(a4)
		move	Bob_X_Position(a4),Ghost_Start_X(a4)
		move	Bob_Y_Position(a4),Ghost_Start_Y(a4)
		sub	#80,Ghost_Start_Y(a4)
		move.l	a5,a4
.NoEntry_Found	rts
*-------------------------------------------------------------------------
Enter_TheGemsen	*--*>Enter Three Gems 
		moveq	#3,d0
		jsr	Get_Entry_Adrs_HI
		tst	d0
		bne	.NoEntry_Found

		*--*>Enter GEMS
		move.l	a4,a5
		lea	Area_Enter_Vector(a6),a1
		lea	ENTRY_ADRS(a6),a0
		move.l	(a0),a4
		move	#GEMC3,d0
		jsr	Enter_Thiz_Gem
		move.l	#$fffe0000,Gem_X_Speed(a4)
		move.l	#$fffd0000,Gem_Y_Speed(a4)
		move.l	4(a0),a4
		move	#GEMC3,d0
		jsr	Enter_Thiz_Gem
		move.l	#$00030000,Gem_X_Speed(a4)
		move.l	#$fffd0000,Gem_Y_Speed(a4)
		move.l	8(a0),a4
		move	#GEMC4,d0
		jsr	Enter_Thiz_Gem
		move.l	#$00000000,Gem_X_Speed(a4)
		move.l	#$fffc0000,Gem_Y_Speed(a4)
		move.l	a5,a4
.NoEntry_Found	rts
*-------------------------------------------------------------------------------------
Enter_Thiz_Gem	*--ENTER GEM LEft
		move	Bob_X_Position(a5),d1
		add	#6,d1
		move	Bob_Y_Position(a5),d2
		addq	#4,d2
		jsr	ENTER_BOB
		move.l	Bob_Routine(a4),Extra_Init_Rout(a4)
		move.l	#Extra_Rout_Falling,Bob_Routine(a4)
		rts
*-------------------------------------------------------------------------------------
Mull_X_Dir		=Bob_Special_1	;B
Mull_Y_Move		=Bob_Special_1+1	;B
Mull_TIME		=Bob_Special_2	;W
Mull_XY_Offset	=Bob_Special_3	;W
Mull_X_Speed	=Bob_Koords_Save1	;W
Mull_Y_Speed	=Bob_Koords_Save1+2	;W
Mull_X_Acce		=Bob_Koords_Save2	;W
Mull_Y_Acce		=Bob_Koords_Save2+2	;W
Mull_Show_Rout	=Bob_Plane_Order	;LW
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Box_D_X_Dir		=Bob_Special_1	;B
Box_D_Y_Move	=Bob_Special_1+1	;B
Box_D_TIME		=Bob_Special_2	;W
Box_D_XY_Offset	=Bob_Special_3	;W
Box_D_X_Speed	=Bob_Koords_Save1	;W
Box_D_Y_Speed	=Bob_Koords_Save1+2	;W
Box_D_X_Acce	=Bob_Koords_Save2	;W
Box_D_Y_Acce	=Bob_Koords_Save2+2	;W
Box_D_Show_Rout	=Bob_Plane_Order	;LW
*---------------------------------------------------------------------------
ENTER_Box_D		*---*>Enter vier Mull
		movem.l	a0-a6/d0-d7,-(sp)
.Enter_Left_Box	*--*>Enter 1
		move.l	a4,a5
		move.l	Box_DamTab_Adr(a4),a2
		move.l	(a2),a0
		jsr	Get_Entry_Box_D
		tst	d0
		bmi.s	.NoEntryFound
		move.l	Box_Show_Rout(a5),Box_D_Show_Rout(a4)
		jsr	Enter_FlyData
		move.l	a5,a4
		*--*>Enter 2
		move.l	4(a2),a0
		jsr	Get_Entry_Box_D
		tst	d0
		bmi.s	.NoEntryFound
		move.l	Box_Show_Rout(a5),Box_D_Show_Rout(a4)
		jsr	Enter_FlyData
.NoEntryFound	*--*>kein Eintrag mehr fei
		move.l	a5,a4
		movem.l	(sp)+,a0-a6/d0-d7
		rts
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Get_Entry_Box_D	*--*>Search_Entry for Mull
		move	#G_BOX_DAMAGE,d0
		move	Bob_X_Position(a4),d1
		add	(a0)+,d1
		move	Bob_Y_Position(a4),d2
		add	(a0)+,d2
		lea	Area_Enter_Vector(a6),a1
		jsr	Search_Bob_Entry
		rts
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Enter_FlyData	*--*>Enter Values of Objext
		move.l	(a0)+,Bob_Next_Anim(a4)
		move	(a0)+,Mull_TIME(a4)
		move.b	(a0)+,Mull_X_Dir(a4)
		move.b	(a0)+,d0
		move	(a0)+,Mull_X_Speed(a4)
		move	(a0)+,Mull_X_Acce(a4)
		move	(a0)+,Mull_Y_Speed(a4)
		move	(a0)+,Mull_Y_Acce(a4)
		rts
**************************************************************************************
*-------------------------------------------------------------------------------------
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Box_Damage_Rout	*--*>Standart Mull Routs
		jsr	Standart_BobAnim
		jsr	Test_Bob_Out
		jsr	Make_Mull_TIME
		jsr	Make_Box_Speeds
		rts

*------------------------------------------------------------------------------------
Make_Mull_TIME	*--*>Test if its Time to blink
		subq	#1,Mull_TIME(a4)
		bne.s	.NoOut_Mull
		*--*>Out Mull
		jsr	Out_Bob_Damage
		rts
.NoOut_Mull		*--*>Test if Mull should blink
		cmp	#7,Mull_TIME(a4)
		bhi.s	.ShowIt
		move	Mull_TIME(a4),d1
		and	#1,d1
		bne.s	.DontShowIt
.ShowIt		move.l	Box_D_Show_Rout(a4),a0
		jsr	(a0)
.DontShowIt		rts
*-------------------------------------------------------------------------------------
Make_Box_Speeds	*---*>Speeds, die Am Anfang Initialisiert werden machen
		*--*>X-Speed
		move	Box_D_X_Acce(a4),d0
		add	d0,Box_D_X_Speed(a4)
		move.b	Box_D_X_Speed(a4),d0
		ext.w	d0
		add	d0,Bob_X_Position(a4)
		*--*>Y-Speed
		move	Box_D_Y_Acce(a4),d0
		add	d0,Box_D_Y_Speed(a4)
		move.b	Box_D_Y_Speed(a4),d0
		ext.w	d0
		add	d0,Bob_Y_Position(a4)
		rts
*------------------------------------------------------------------------------------
Make_Mull_Speeds	*---*>Speeds, die Am Anfang Initialisiert werden machen
		*--*>X-Speed
		move.b	Mull_X_Speed(a4),d0
		ext.w	d0
		add	d0,Bob_X_Position(a4)
		*--*>Y-Speed
		add	#$0020,Mull_Y_Speed(a4)
		move.b	Mull_Y_Speed(a4),d0
		ext.w	d0
		add	d0,Bob_Y_Position(a4)
		rts

**************************************************************************************
*-------------------------------------------------------------------------------------
*---------------	GLOBAL ROUTS FOR STONES
*-------------------------------------------------------------------------------------
Act_Stone_Tab	=Bob_Koords_Save2	;LW
Stone_Show_Rout	=Bob_Koords_Save1	;LW
Stone_Wait_Anm	=Bob_Special_1	;LW
Stone_Left_Anm	=Bob_Special_3	;LW
Stone_Right_Anm	=Bob_Plane_Order	;LW
Stone_Init_Anim_Dir	=Bob_Hit		;W
*-------------------------------------------------------------------------------------
Stone_Move_Dir	*--*>Standard Bob Routs
		move.w	#200,Bob_Out_X_Val(a4)
		move.w	#200+32,Bob_Out_Y_Val(a4)
		jsr	Standart_BobAnim
		jsr	Test_Bob_Out
		move.l	Act_Stone_Tab(a4),a2
		cmp.b	#BOB_FALSE,Bob_Used(a4)
		bne.s	.NoStoneOut
		clr.w	TEMET_Other_Object(a2)
		rts
.NoStoneOut	*--*>Test if Stone Hits
		jsr	Test_TEMET_Hit
		*--*>Make Stone Roll
		move.l	Act_Stone_Tab(a4),a2
		move.l	a2,Act_TEMET_Tab(a6)
		move	Bob_X_Position(a4),TEMET_X_Position(a2)
		move	Bob_Y_Position(a4),TEMET_Y_Position(a2)
		move.l	a4,-(sp)
		jsr	TEMET_Supervisor_Stone
		move.l	(sp)+,a4
		*--*>Get Koords
		move.l	Act_Stone_Tab(a4),a2
		move	TEMET_X_Position(a2),Bob_X_Position(a4)
		move	TEMET_Y_Position(a2),Bob_Y_Position(a4)
		move.l	#WorkRam,Act_TEMET_Tab(a6)
	

		tst	TEMET_Speed_X(a2)
		bne.s	.NoInit_Wait
		move.l	Stone_Wait_Anm(a4),Bob_Next_Anim(a4)
		clr.w	Stone_Init_Anim_Dir(a4)
.NoInit_Wait
		;tst	TEMET_New_Calc_Flag(a2)
		;bne.s	.NoTestThis
		;cmp	#FALLEN,TEMET_Status(a2)
		;beq.s	.NormalStone

.NoTestThis	cmp	#1,TEMET_New_Calc_Flag(a2)
		bne.s	.NoNormalStone
		cmp	#FALLEN,TEMET_Status(a2)
		bne.s	.NoNormalStone
		*--*>Init Normal
.NormalStone	move.l	#STONE_Speed,Bob_Routine(a4)
.NoNormalStone	*--*>Test Hit
		jsr	Test_TIMET_HitStone
		move.l	Stone_Show_Rout(a4),a0
		jsr	(a0)
		rts
*-------------------------------------------------------------------------------------
Search_Stone_Entry	*--*>Welcher Eintrag ist frei ?
		lea	STONE_Tab1,a2
		tst	TEMET_Other_Object(a2)
		bne.s	.Test_Second
		move.l	a2,Act_Stone_Tab(a4)
		bra.s	.InitStone
.Test_Second	lea	STONE_Tab2,a2
		tst	TEMET_Other_Object(a2)
		bne.s	.Test_Third
		move.l	a2,Act_Stone_Tab(a4)
		bra.s	.InitStone
.Test_Third	lea	STONE_Tab3,a2
		tst	TEMET_Other_Object(a2)
		bne.s	.End_Stone
		move.l	a2,Act_Stone_Tab(a4)
		bra.s	.InitStone
.End_Stone	*--*>NoEntry_Free
		jsr	Out_Bob
		moveq	#-1,d7
		rts
.InitStone		*--*>InitStone
		move.l	Act_Stone_Tab(a4),a2
		move	#1,TEMET_Other_Object(a2)
		clr.w	TEMET_Speed_X(a2)
		clr.w	TEMET_Speed_Y(a2)
		move.w	#FALLEN,TEMET_Status(a2)
		clr.w	TEMET_Speed_X_Rest(a2)
		clr.w	TEMET_Speed_Y_Rest(a2)
		clr.w	TEMET_Speed_W_X(a2)
		clr.w	TEMET_Speed_W_Y(a2)
		clr.w	TEMET_Speed_R_X(a2)
		clr.w	TEMET_Speed_R_Y(a2)
		move.w	#1,TEMET_S_Test_Flag(a2)
		moveq	#1,d7
		rts
*-------------------------------------------------------------------------------------
STONE_Speed		*--*>Standard Bob Routs
		move.w	#200,Bob_Out_X_Val(a4)
		move.w	#200+32,Bob_Out_Y_Val(a4)
		jsr	Standart_BobAnim
		jsr	Test_Bob_Out
		move.l	Act_Stone_Tab(a4),a2
		cmp.b	#BOB_FALSE,Bob_Used(a4)
		bne.s	.NoStoneOut
		clr.w	TEMET_Other_Object(a2)
		rts
.NoStoneOut		*--*>Test if Stone Hits
		tst	TEMET_Speed_X(a2)
		bne.s	.TestHit
		tst	TEMET_Speed_Y(a2)
		bne.s	.TestHit
		bra.s	.NoHit
.TestHit	jsr	Test_TEMET_Hit
.NoHit		*--*>Make Stone Roll
		move.l	Act_Stone_Tab(a4),a2
		move.l	a2,Act_TEMET_Tab(a6)
		move	Bob_X_Position(a4),TEMET_X_Position(a2)
		move	Bob_Y_Position(a4),TEMET_Y_Position(a2)
		move.l	a4,-(sp)
		jsr	TEMET_Supervisor_Stone
		move.l	(sp)+,a4
		*--*>Get Koords
		move.l	Act_Stone_Tab(a4),a2
		move	TEMET_X_Position(a2),Bob_X_Position(a4)
		move	TEMET_Y_Position(a2),Bob_Y_Position(a4)
		move.l	#WorkRam,Act_TEMET_Tab(a6)
		*--*>Make Speed Bremsen
		move	TEMET_Speed_X(a2),d0
		beq.s	.Init_Wait
;		bpl.s	.NoNegD0
;		neg	d0
;.NoNegD0	cmp	#16,d0
;		bls.s	.Init_Wait
;		*--*>BremsSpeed
;		tst	TEMET_Speed_X(a2)
		bmi.s	.Move_Left
.Move_Right	*--*>Speed Pos
		sub	#8,TEMET_Speed_X(a2)
		bpl.s	.Speed_Ok
		clr.w	TEMET_Speed_X(a2)
		bra.s	.Init_Wait
		;bra.s	.Speed_Ok
.Move_Left	*--*>Speed Neg
		add	#8,TEMET_Speed_X(a2)
		bmi.s	.Speed_Ok
		clr.w	TEMET_Speed_X(a2)
		bra.s	.Init_Wait
.Speed_Ok	*--*>Make Animation
		tst	TEMET_Speed_X(a2)
		beq.s	.Init_Wait
		bpl.s	.Test_Init_Right
		bra.s	.Test_Init_Left
.Init_Wait	*--*>Init Wait
		move.l	Stone_Wait_Anm(a4),Bob_Next_Anim(a4)
		clr.w	Stone_Init_Anim_Dir(a4)
		bra.s	.NoInit
.Test_Init_Left	*--*>Test if Should Init
		tst	Stone_Init_Anim_Dir(a4)
		bmi.s	.NoInit
		move.l	Stone_Left_Anm(a4),Bob_Next_Anim(a4)
		move	#-1,Stone_Init_Anim_Dir(a4)
		clr.w	Bob_Anim_Delay(a4)
		bra.s	.NoInit
.Test_Init_Right	*--*>Test if Should Init
		tst	Stone_Init_Anim_Dir(a4)
		beq.s	.InitR
		bpl.s	.NoInit
.InitR		move.l	Stone_Right_Anm(a4),Bob_Next_Anim(a4)
		clr.w	Bob_Anim_Delay(a4)
		move	#1,Stone_Init_Anim_Dir(a4)
.NoInit		*--*>Make ANim Speed
		move.b	TEMET_Speed_X(a2),d0
		bpl.s	.Okd0pos
		neg.b	d0
.Okd0pos		ext.w	d0
		move	#6,Bob_Anim_Delay_Init(a4)
		sub	d0,Bob_Anim_Delay_Init(a4)
.AnimSpeedOk	*--*>Test Hit
		jsr	Test_TIMET_HitStone
		move.l	Stone_Show_Rout(a4),a0
		jsr	(a0)
		rts
*-------------------------------------------------------------------------------------
Test_TIMET_HitStone	*--*>Test Kollision
		lea	WorkRam,a2
		jsr	KollTopBobTest
		tst	d7
		bmi 	.NoKollFl
		;--Kollision On
		jsr	Make_Bump
		*--*>out Huhn
		jsr	ENTER_SMOKE_X
		jsr	ENTER_SMOKE_Y
		move.l	Act_Stone_Tab(a4),a2
		clr.w	TEMET_Other_Object(a2)
		jsr	Out_Bob_Damage
		IFEQ	SOUNDFX
		moveq	#11,d0
		jsr	TFMX+16
		ENDC
.NoKollFl		rts
**************************************************************************************
*-------------------------------------------------------------------------------------
*------------------	GLOBAl HUHN ROUTS
*-------------------------------------------------------------------------------------
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		rsreset
Huhn_Fly_Left_Adr	rs.l	1
Huhn_Fly_Right_Adr	rs.l	1
Huhn_Walk_Left_Adr	rs.l	1
Huhn_Walk_Right_Adr	rs.l	1
Huhn_Conv_Left_Adr	rs.l	1
Huhn_Conv_Right_Adr	rs.l	1
Huhn_Sigel_Foot1	rs.l	1
Huhn_Sigel_Foot2	rs.l	1
Huhn_VRam		rs.w	1
FHuhn_Display	rs.l	1
THuhn_Anm_Panic_Left	rs.l	1
THuhn_Anm_Panic_Right	rs.l	1
*-------------------------------------------------------------------------------------
WHuhn_X_Dir		=Bob_Special_1	;B	*GLOBAL
Huhn_X_Range		=Bob_Special_1+1	;B
Huhn_MoveTab_Offs	=Bob_Special_2	;W
Huhn_Fall_Y_Speed	=Bob_Hit		;W
Huhn_Foot1_OffsX	=Bob_Koords_Save1	;B
Huhn_Foot1_OffsY	=Bob_Koords_Save1+1	;B
Huhn_Foot2_OffsX	=Bob_Koords_Save1+2	;B
Huhn_Foot2_OffsY	=Bob_Koords_Save1+3	;B
WHuhn_Show_Rout	=Bob_Koords_Save2	;LW
Huhn_Anim_Adrs	=Bob_Plane_Order	;LW
Huhn_Conv_RoutI	=Bob_Special_3	;LW
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Huhn_Wait		=Bob_Hit		;W	*UNDERWORLD
UHuhn_Y_Speed	=Bob_Special_2	;W	*bei Conv
Huhn_No_Move	=Bob_Special_1+1	;B	*bei Conv
Huhn_Old_Y_Pos	=Bob_Special_4	;W	*bei Austehen
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HUHN_X_RANGE_VAL	=120
HUHN_X_RANGE_FLY	=90


;Huhn_Prop_Adr	=Bob_Koords_Save1	;LW
;Huhn_Prop_Y_Offset	=Bob_Special_3	;W
;Huhn_Prop_New_Anim	=Bob_Special_2	;B
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;Huhn_Feet1_Adr	=Bob_Koords_Save1	;LW
;Huhn_Feet2_Adr	=Bob_Koords_Save2	;LW
;Huhn_MoveTab_Offs	=Bob_Special_2	;W
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;Huhn_Y_Speed	=Bob_Special_2	;W
;Huhn_X_Move	=Bob_Special_3	;W
;Huhn_Wait		=Bob_Special_4	;W
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;Huhn_Old_Y_Pos	=Bob_Special_4	;W
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*-------------------------------------------------------------------------------------
*-----------	HUHN INIT ROUT 1 / TEST IF FLY OR WALK
*-------------------------------------------------------------------------------------
Huhn_Init:		*--*>Normal Huhn initialisieren
		*--X/Y-Positionen holen
		move.w	#200,Bob_Out_X_Val(a4)
		move.w	#200+32,Bob_Out_Y_Val(a4)
		move	Bob_X_Position(a4),d0
		move	Bob_Y_Position(a4),d1
		jsr	TestHuhnRout
		*--*>Jsr to Enter Walk or Enter Flight
		tst	d7
		beq.s	.Go_ENTERWALK
.Go_ENTERFLIGHT	*--Enter Flight
		jsr	.ENTERFLIGHT
		bra.s	.EndEnter
.Go_ENTERWALK	*--Enter Walk
		sub	d3,Bob_Y_Position(a4)
		jsr	.ENTERWALK
.EndEnter		*--Ende Enter
		rts
*-------------------------------------------------------------------------------------
*-----------	ENTER HUHN
*-------------------------------------------------------------------------------------
.ENTERFLIGHT	*--Enter Bases
		move.l	Huhn_Anim_Adrs(a4),a0
		cmp	#S_HUHN_RIGHT,Bob_Number(a4)
		beq.s	.Init_Right_FHuhn
.Init_Left_FHuhn	*--*>Left Huhn
		move.b	#-1,WHuhn_X_Dir(a4)
		move.l	Huhn_Fly_Left_Adr(a0),Bob_Next_Anim(a4)
		move.l	#Fly_Huhn_Rout,Bob_Routine(a4)
		bra.s	.GoBack_
.Init_Right_FHuhn	*--*>Right Huhn
		move.b	#1,WHuhn_X_Dir(a4)
		move.l	Huhn_Fly_Right_Adr(a0),Bob_Next_Anim(a4)
		move.l	#Fly_Huhn_Rout,Bob_Routine(a4)
.GoBack_		*--Get Base Back
		rts
*-------------------------------------------------------------------------------------
*-----------	ENTER HUHN MIT FEET
*-------------------------------------------------------------------------------------
.ENTERWALK		*--Enter Bases
		move.l	Huhn_Anim_Adrs(a4),a0
		move.l	#Huhn_Walk_Rout,Bob_Routine(a4)
		cmp	#S_HUHN_RIGHT,Bob_Number(a4)
		bne.s	.Init_Left_WHuhn
.Init_Right_WHuhn	*--*>Left Huhn
		move.b	#1,WHuhn_X_Dir(a4)
		move.l	Huhn_Walk_Right_Adr(a0),Bob_Next_Anim(a4)
		bra.s	.GoBack
.Init_Left_WHuhn	*--*>Right Huhn
		move.b	#-1,WHuhn_X_Dir(a4)
		move.l	Huhn_Walk_Left_Adr(a0),Bob_Next_Anim(a4)
.GoBack		*--Get Base Back
		rts
*-------------------------------------------------------------------------------------
*------------	Test if Walk Or Fly
*-------------------------------------------------------------------------------------
TestHuhnRout	*--*>Init Walk/Fly Flag to Walk
		moveq	#0,d7
		*--*>Calculate LevelAdr
		add	#16,d0
		add	#48-10,d1
		jsr	Get_Block_All
		add	d0,d0
		add	d0,d0
		move.l	Scr_Block_EntryAdrs(a6),a1
		move.l	(a1,d0),a1
		cmp.b	#SCHRAEG,Block_Schraeg_Flag(a1)
		beq	.Fliegen
		cmp.b	#boden,Block_Through(a1)
		beq.s	.Back
.Fliegen		moveq	#-1,d7	;Fliegen
.Back		rts
**************************************************************************************
*-------------------------------------------------------------------------------------
*---------------	FLY ROUTS
*-------------------------------------------------------------------------------------
*-------------------------------------------------------------------------------------
Fly_Huhn_Rout	*--*>Standart Routs
		jsr	Test_Bob_Out
		jsr	Standart_BobAnim
		jsr	Test_TEMET_Hit

		jsr	Huhn_Move_Range
		tst	d7
		beq.s	.MakeXKolli
		move.l	Huhn_Anim_Adrs(a4),a0
		tst.b	WHuhn_X_Dir(a4)
		bpl.s	.initRightFly0
.initLeftFly0	move.l	Huhn_Fly_Left_Adr(a0),Bob_Next_Anim(a4)
		bra.s	.NoXFKoll
.initRightFly0	move.l	Huhn_Fly_Right_Adr(a0),Bob_Next_Anim(a4)
		bra.s	.NoXFKoll


.MakeXKolli	jsr	TestHuhnXKoll
		tst	d7
		beq.s	.NoXFKoll

		move.l	Huhn_Anim_Adrs(a4),a0
		tst.b	WHuhn_X_Dir(a4)
		bpl.s	.initRightFly
.initLeftFly	move.l	Huhn_Fly_Left_Adr(a0),Bob_Next_Anim(a4)
		move.b	#HUHN_X_RANGE_FLY,Huhn_X_Range(a4)
		bra.s	.NoXFKoll
.initRightFly	move.l	Huhn_Fly_Right_Adr(a0),Bob_Next_Anim(a4)
		move.b	#-HUHN_X_RANGE_FLY,Huhn_X_Range(a4)

.NoXFKoll	jsr	Test_TIMET_Hit_HuhnFL

		move.l	WHuhn_Show_Rout(a4),a0
		jsr	(a0)

		move.l	Huhn_Anim_Adrs(a4),a0
		move.l	FHuhn_Display(a0),a0
		jsr	(a0)
		rts
*-------------------------------------------------------------------------------------
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
WHuhn_Fall_Down	*--*>Fall Down
		jsr	Test_Bob_Out
		jsr	Standart_BobAnim
		move.l	WHuhn_Show_Rout(a4),a0
		jsr	(a0)
		add	#$0010,Huhn_Fall_Y_Speed(a4)
		move.b	Huhn_Fall_Y_Speed(a4),d0
		ext.w	d0
		add	d0,Bob_Y_Position(a4)
		*--*>Test Kaputt ?
		move	Bob_X_Position(a4),d0
		move	Bob_Y_Position(a4),d1
		add	#16,d0
		add	#36,d1
		jsr	Get_Block_Icon
		add	d0,d0
		add	d0,d0
		move.l	Scr_Block_EntryAdrs(a6),a1
		move.l	(a1,d0),a1
		cmp.b	#boden,Block_Through(a1)
		beq.s	.Kollide
		cmp.b	#swand,Block_Through(a1)
		beq.s	.Kollide
		bra.s	.NoKollide
.Kollide		*--*>Kaputt !
		jsr	ENTER_SMOKE_X
		jsr	ENTER_SMOKE_Y
		move.l	Huhn_Anim_Adrs(a4),a0
		cmp.l	#UHuhn_Anim_Adrs,a0
		bne.s	.NoMull1
		jsr	ENTER_Mull
.NoMull1		jsr	Out_Bob_Damage
		IFEQ	SOUNDFX
		moveq	#3,d0
		jsr	TFMX+16
		ENDC
.NoKollide		rts
*-------------------------------------------------------------------------------------
Test_TIMET_Hit_HuhnWA
Test_TIMET_Hit_HuhnFL	*--*>Test Kollision
		lea	WorkRam,a2
		jsr	KollTopBobTest
		tst	d7
		bmi 	.NoKollFl
		;--Kollision On
		jsr	Make_Bump
		*--*>out Huhn
		jsr	ENTER_SMOKE_X
		jsr	ENTER_SMOKE_Y
		move.l	Huhn_Anim_Adrs(a4),a0
		cmp.l	#UHuhn_Anim_Adrs,a0
		bne.s	.NoMull
		jsr	ENTER_Mull
.NoMull		move.l	#WHuhn_Fall_Down,Bob_Routine(a4)
		clr.w	Huhn_Fall_Y_Speed(a4)
		IFEQ	SOUNDFX
		moveq	#9,d0
		jsr	TFMX+16
		ENDC
.NoKollFl		rts
*-------------------------------------------------------------------------------------
Huhn_Move_Range	*--*>X Speed Make
		moveq	#0,d7
		move.l	Huhn_Anim_Adrs(a4),a0
		nop
.Move_IT_XF	tst.b	WHuhn_X_Dir(a4)
		bpl.s	.Move_RightF
.Move_LeftF	*--Test if Flyer scholud move Right
		tst.b	Huhn_X_Range(a4)
		bpl.s	.Move_XF
		move.b	Huhn_X_Range(a4),d0
		neg.b	d0
		cmp.b	#HUHN_X_RANGE_FLY,d0
		blo.s	.Move_XF
		tst	Bob_Y_Offset(a4)
		bne.s	.Move_XFL
		neg.b	WHuhn_X_Dir(a4)
		move.l	Huhn_Fly_Right_Adr(a0),Bob_Next_Anim(a4)
		clr.w	Bob_Anim_Delay(a4)
		moveq	#-1,d7
		bra.s	.Move_XF
.Move_RightF	*--Test if Flyer schould move Left
		tst.b	Huhn_X_Range(a4)
		bmi.s	.Move_XF
		move.b	Huhn_X_Range(a4),d0
		cmp.b	#HUHN_X_RANGE_FLY,d0
		blo.s	.Move_XF
		tst	Bob_Y_Offset(a4)
		bne.s	.Move_XFR
		neg.b	WHuhn_X_Dir(a4)
		move.l	Huhn_Fly_Left_Adr(a0),Bob_Next_Anim(a4)
		clr.w	Bob_Anim_Delay(a4)
		moveq	#-1,d7
		;bra.s	.Move_XF
.Move_XF	*--Move Flyer in X Direction
		moveq	#1,d0
		tst.b	WHuhn_X_Dir(a4)
		bpl.s	.okPositivF
		moveq	#-1,d0
.okPositivF	add	d0,Bob_X_Position(a4)
		add.b	d0,Huhn_X_Range(a4)
.NoRangeChangeF	rts
.Move_XFR	addq	#1,Bob_X_Position(a4)
		rts
.Move_XFL	subq	#1,Bob_X_Position(a4)
		rts
*-------------------------------------------------------------------------------------
Huhn_Move_RangeW	*--*>X Speed Make
		move.l	Huhn_Anim_Adrs(a4),a0
		nop
.Move_IT_XF	tst.b	WHuhn_X_Dir(a4)
		bpl.s	.Move_RightF
.Move_LeftF	*--Test if Flyer scholud move Right
		tst.b	Huhn_X_Range(a4)
		bpl.s	.Move_XF
		move.b	Huhn_X_Range(a4),d0
		neg.b	d0
		cmp.b	#HUHN_X_RANGE_VAL,d0
		blo.s	.Move_XF
		neg.b	WHuhn_X_Dir(a4)
		move.l	Huhn_Fly_Right_Adr(a0),Bob_Next_Anim(a4)
		clr.w	Bob_Anim_Delay(a4)
		bra.s	.Move_XF
.Move_RightF	*--Test if Flyer schould move Left
		tst.b	Huhn_X_Range(a4)
		bmi.s	.Move_XF
		move.b	Huhn_X_Range(a4),d0
		cmp.b	#HUHN_X_RANGE_VAL,d0
		blo.s	.Move_XF
		neg.b	WHuhn_X_Dir(a4)
		move.l	Huhn_Fly_Left_Adr(a0),Bob_Next_Anim(a4)
		clr.w	Bob_Anim_Delay(a4)
		;bra.s	.Move_XF
.Move_XF	*--Move Flyer in X Direction
		moveq	#1,d0
		tst.b	WHuhn_X_Dir(a4)
		bpl.s	.okPositivF
		moveq	#-1,d0
.okPositivF	add	d0,Bob_X_Position(a4)
		add.b	d0,Huhn_X_Range(a4)
.NoRangeChangeF	rts
*-------------------------------------------------------------------------------------
TestHuhnXKoll	*--*>Test Huhn X Koll
		moveq	#0,d7	;NoKollision
		move	Bob_X_Position(a4),d0
		move	Bob_Y_Position(a4),d1
		add	#16,d1
		tst.b	WHuhn_X_Dir(a4)
		bmi.s	.TestLeftXKoll
		add	Bob_Width(a4),d0
.TestLeftXKoll	jsr	Get_Block_All
		swap	d0
		*--*>Test auf X Kolli
		btst	#SCR_KOLLISION_BIT,d0
		beq.s	.NoXKolli
		;bra.s	.NoXKolli
		;--X-Kollision
.Make_X_Koll	neg.b	WHuhn_X_Dir(a4)
		moveq	#-1,d7
		rts
.NoXKolli	cmp.l	#Huhn_Walk_Rout,Bob_Routine(a4)
		beq.s	.NoCheckSrg
		swap	d0
		add	d0,d0
		add	d0,d0
		move.l	Scr_Block_EntryAdrs(a6),a1
		move.l	(a1,d0),a1
		cmp.b	#swand,Block_Through(a1)
		beq.s	.Make_X_Koll
		cmp.b	#SCHRAEG,Block_Schraeg_Flag(a1)
		beq	.Make_X_Koll
.NoCheckSrg	rts
**************************************************************************************
*-------------------------------------------------------------------------------------
*---------------	WALKING HUHN (USES FLY ROUTS TOO)
*-------------------------------------------------------------------------------------
Huhn_Walk_Rout	*--*>Test if Huhn-Object is Out
		jsr	Test_Bob_Out
		jsr	Test_TEMET_Hit
		jsr	Huhn_Move_RangeW
		jsr	TestHuhnXKoll
		move	Bob_X_Position(a4),d0
		move	Bob_Y_Position(a4),d1
		jsr	TestHuhnRout
		tst	d7
		bpl.s	.NoChangeDir
		neg.b	WHuhn_X_Dir(a4)

.NoChangeDir	move.l	Huhn_Anim_Adrs(a4),a0
		tst.b	WHuhn_X_Dir(a4)
		bpl.s	.InitRight
.InitLeft	move.l	Huhn_Walk_Left_Adr(a0),Bob_Next_Anim(a4)
		jsr	Get_Next_Bob_Frame
		bra.s	.AfterInit
.InitRight		move.l	Huhn_Walk_Right_Adr(a0),Bob_Next_Anim(a4)
		jsr	Get_Next_Bob_Frame

.AfterInit	jsr	Make_Feet_Koords_M
		jsr	Test_TIMET_Hit_HuhnWA
		cmp.l	#WHuhn_Fall_Down,Bob_Routine(a4)
		bne.s	.Ende
		move.l	Huhn_Conv_RoutI(a4),a0
		jsr	(a0)
.Ende		*--*>Display Walker
		jsr	Display_Huhn
		rts
*-------------------------------------------------------------------------------------
Display_Huhn	*--*>Show Foot 1
		moveq	#0,d2
		move	Bob_X_Position(a4),d0
		move	Bob_Y_Position(a4),d1
		add	#34,d1
		move.b	Huhn_Foot1_OffsX(a4),d2
		add	d2,d0
		move.b	Huhn_Foot1_OffsY(a4),d2
		sub	d2,d1
		jsr	Check_Object_Borders_Jan
		beq.s	.NoDisplayF1
		move.l	Huhn_Anim_Adrs(a4),a0
		move.w	Huhn_VRam(a0),d3
		move.l	Huhn_Sigel_Foot1(a0),a0
		jsr	Add_Simple_Sigel
.NoDisplayF1	*--*>Show Huhn
		move.l	WHuhn_Show_Rout(a4),a0
		jsr	(a0)
		*--*>Show Foot 2
		moveq	#0,d2
		move	Bob_X_Position(a4),d0
		move	Bob_Y_Position(a4),d1
		add	#34,d1
		move.b	Huhn_Foot2_OffsX(a4),d2
		add	d2,d0
		move.b	Huhn_Foot2_OffsY(a4),d2
		sub	d2,d1
		jsr	Check_Object_Borders_Jan
		beq.s	.NoDisplayF2
		move.l	Huhn_Anim_Adrs(a4),a0
		move.w	Huhn_VRam(a0),d3
		move.l	Huhn_Sigel_Foot2(a0),a0
		jsr	Add_Simple_Sigel

.NoDisplayF2	rts
*-------------------------------------------------------------------------------------
Make_Feet_Koords_M	tst.b	WHuhn_X_Dir(a4)
		bpl	.FeetRight
.FeetLeft		lea	Huhn_MoveTab,a0
		move	Huhn_MoveTab_Offs(a4),d7
		subq	#2,d7
		tst	d7
		bpl.s	.NoOverflowL1
		move	#32*2-2,d7
.NoOverflowL1	move	d7,Huhn_MoveTab_Offs(a4)
		move	d7,d6
		moveq	#0,d2
		cmp	#16*2,d6
		blo.s	.NoOverflowL2
		sub	#16*2,d6
.NoOverflowL2	move.b	1(a0,d6),d2
		lsr	#2,d2
		neg	d2
		move	#-6,Bob_X_Offset(a4)
		move	d2,Bob_Y_Offset(a4)

		*--*>Get Koords for feet
		move.b	(a0,d7),Huhn_Foot1_OffsX(a4)
		move.b	1(a0,d7),Huhn_Foot1_OffsY(a4)
		move.b	16*2(a0,d7),Huhn_Foot2_OffsX(a4)
		move.b	16*2+1(a0,d7),Huhn_Foot2_OffsY(a4)
		rts

*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
.FeetRight		lea	Huhn_MoveTab,a0
		move	Huhn_MoveTab_Offs(a4),d7
		addq	#2,d7
		cmp	#32*2,d7
		blo.s	.NoOverflowR1
		moveq	#0,d7
.NoOverflowR1	move	d7,Huhn_MoveTab_Offs(a4)
		move	d7,d6
		moveq	#0,d2
		cmp	#16*2,d6
		blo.s	.NoOverflowR2
		sub	#16*2,d6
.NoOverflowR2	move.b	1(a0,d6),d2
		lsr	#2,d2
		neg	d2
		move	#6,Bob_X_Offset(a4)
		move	d2,Bob_Y_Offset(a4)

		*--*>Get Koords for feet
		move.b	(a0,d7),Huhn_Foot1_OffsX(a4)
		move.b	1(a0,d7),Huhn_Foot1_OffsY(a4)
		move.b	16*2(a0,d7),Huhn_Foot2_OffsX(a4)
		move.b	16*2+1(a0,d7),Huhn_Foot2_OffsY(a4)
		rts
*-------------------------------------------------------------------------------------
Huhn_MoveTab	dc.b	01,04,02,07,03,09,04,10
		dc.b	05,11,06,12,07,12,08,13,09,13
		dc.b	10,12,11,12,12,11,13,10,14,09
		dc.b	15,07,16,04
Second_Foot		dc.b	16,00,15,00,14,00,13,00
		dc.b	12,00,11,00,10,00,09,00,08,00
		dc.b	07,00,06,00,05,00,04,00,03,00
		dc.b	02,00,01,00
		dc.b	01,04,02,07,03,09,04,10
		dc.b	05,11,06,12,07,12,08,13,09,13
		dc.b	10,12,11,12,12,11,13,10,14,09
		dc.b	15,07,16,04

**************************************************************************************
*---------------------------------------------------------------------------
*	Routines InfoTables and AnimTables of	DOORS
*---------------------------------------------------------------------------
*---------------------------------------------------------------------------
Door_Max_Height	=Bob_Special_1	;B
Door_Act_Height	=Bob_Special_1+1	;B
Door_Open_It	=Bob_Special_2	;B
Door_Close_After	=Bob_Special_2+1	;B
Door_Wait_Time	=Bob_Special_3	;B
Door_Under_Door	=Bob_Special_3+1	;B
Door_X_Dif		=Bob_Special_4	;W
Door_Open_Rout	=Bob_Koords_Save1	;LW
Door_Show_Rout	=Bob_Koords_Save2	;LW
Door_Anims		=Bob_Plane_Order	;LW
*---------------------------------------------------------------------------
*---------------	GLOBAL Door Routs
Calc_Door_Height	*--*> Bere Door Heigt
		moveq	#48,d7
		move	Bob_X_Position(a4),d0
		move	Bob_Y_Position(a4),d1
		add	#3*16,d1
		jsr	Get_Block_Icon
		add	d0,d0
		add	d0,d0
		move.l	Scr_Block_EntryAdrs(a6),a1
		move.l	(a1,d0),a1
		cmp.b	#boden,Block_Through(a1)
		beq.s	.NoAddheight
		*--Add Height
		add	#16,d7
.NoAddheight	rts		
*---------------------------------------------------------------------------
Clr_Koll_Bits:	*--*>Clr Kolli Bits
		move.l	Scr_Level_Bits(a6),a1	
		*--*>Bere
		lsr	#4,d1
		mulu	Scr_Level_Width(a6),d1
		lsr	#4,d0
		add	d1,d0
		move	d0,d1
		lsr	#1,d0
		add	d0,a1
		and	#1,d1
		beq.s	.Gerade
.UnGerade		*--*>Shift Down
		bclr.b	#SCR_KOLLISION_BIT,(a1)
		rts
.Gerade		*--*>Ausmaskieren
		bclr.b	#SCR_KOLLISION_BIT+4,(a1)
		rts
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Set_Koll_Bits:	*--*>Set Kolli Bits
		move.l	Scr_Level_Bits(a6),a1	
		*--*>Bere
		lsr	#4,d1
		mulu	Scr_Level_Width(a6),d1
		lsr	#4,d0
		add	d1,d0
		move	d0,d1
		lsr	#1,d0
		add	d0,a1
		and	#1,d1
		beq.s	.Gerade
.UnGerade		*--*>Shift Down
		bset.b	#SCR_KOLLISION_BIT,(a1)
		rts
.Gerade		*--*>Ausmaskieren
		bset.b	#SCR_KOLLISION_BIT+4,(a1)
		rts
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Clear_TEMET_Koll	*--*>Clear Kollision mit TEMET
		moveq	#0,d7
		move.b	Door_Max_Height(a4),d3
		ext.w	d3
		lsr	#4,d3
		subq	#1,d3
.Clear_Loop		*--Loop to Clear Bits
		move	Bob_X_Position(a4),d0
		move	Bob_Y_Position(a4),d1
		add	d7,d1
		jsr	Clr_Koll_Bits
		add	#16,d7
		dbf	d3,.Clear_Loop
		rts
*---------------------------------------------------------------------------
Make_TEMET_Koll	*--*>Goto Clear
		jsr	Clear_TEMET_Koll
		*--*>Make Kollision mit TEMET
		*--Set Bits
		moveq	#0,d7
		cmp.b	#48,Door_Act_Height(a4)
		bls.s	.NoSetThree
		moveq	#3,d3
		bra.s	.Set_Bits
.NoSetThree	move.b	Door_Act_Height(a4),d3
		ext.w	d3
		subq	#8,d3
		asr	#4,d3
		subq	#1,d3
		bmi.s	.NoSetBits
.Set_Bits		*--SetBits Loop
		move	Bob_X_Position(a4),d0
		move	Bob_Y_Position(a4),d1
		add	d7,d1
		jsr	Set_Koll_Bits
		add	#16,d7
		dbf	d3,.Set_Bits

.NoSetBits		*--Make Open Flag
		rts

Calc_TEMET_Diff:
		lea	(a6),a2
		move	TEMET_X_Position(a2),d0
		add	#16,d0
		move	TEMET_Y_Position(a2),d1
		addq	#4,d1
		sub	Bob_X_Position(a4),d0
		subq	#8,d0
		sub	Bob_Y_Position(a4),d1
		bmi.s	.NoDifInit
		cmp	#48,d1
		bhi.s	.NoDifInit
		*--Differenz initialisieren
		move	d0,Door_X_Dif(a4)
		bra.s	.End
.NoDifInit		*--keine Differenz_initialisieren
		clr.w	Door_X_Dif(a4)
.End		rts
*---------------------------------------------------------------------------
*---------------------------------------------------------------------------
Test_Init_Doors	*--*>Test which Init Rout to Init
		and	#$fff0,Bob_X_Position(a4)
		and	#$fff0,Bob_Y_Position(a4)
		*--*>Get Level Pos
		move	Bob_X_Position(a4),d0
		move	Bob_Y_Position(a4),d1
		jsr	Get_Block_Flags
		swap	d0
		*--*>First init LR (no Bits found)
		move.l	#Init_Door_LR,Bob_Routine(a4)
		*--BITtest
		btst	#SCR_EFFECT_BIT,d0
		beq.s	.End_Search
		move.l	#Init_Door_R,Bob_Routine(a4)
		move	Bob_X_Position(a4),d0
		move	Bob_Y_Position(a4),d1
		add	#16,d1
		jsr	Get_Block_Flags
		swap	d0
		*--BITtest
		btst	#SCR_EFFECT_BIT,d0
		beq.s	.End_Search
		move.l	#Init_Door_L,Bob_Routine(a4)
		move	Bob_X_Position(a4),d0
		move	Bob_Y_Position(a4),d1
		add	#32,d1
		jsr	Get_Block_Flags
		swap	d0
		*--BITtest
		btst	#SCR_EFFECT_BIT,d0
		beq.s	.End_Search
		move.l	#Init_Door_But,Bob_Routine(a4)
.End_Search		*--*>Ende
		rts
*---------------------------------------------------------------------------
Init_Door_LR	*--*>Bere Max Height
		jsr	Calc_Door_Height
		move.b	d7,Door_Max_Height(a4)
		move.b	d7,Door_Act_Height(a4)
		move.b	#1,Door_Close_After(a4)
		move.l	#Door_Main,Bob_Routine(a4)
		move.l	#Door_Open_LR,Door_Open_Rout(a4)
		move.b	#50,Door_Wait_Time(a4)
		bsr	Make_TEMET_Koll
		rts
*---------------------------------------------------------------------------
Init_Door_L		*--*>Bere Max Height
		jsr	Calc_Door_Height
		move.b	d7,Door_Max_Height(a4)
		move.b	d7,Door_Act_Height(a4)
		move.b	#1,Door_Close_After(a4)
		move.l	#Door_Main,Bob_Routine(a4)
		move.l	#Door_Open_L,Door_Open_Rout(a4)
		move.b	#50,Door_Wait_Time(a4)
		bsr	Make_TEMET_Koll
		rts
*-------------------------------------------------------------------------------------
Init_Door_R		*--*>Bere Max Height
		jsr	Calc_Door_Height
		move.b	d7,Door_Max_Height(a4)
		move.b	d7,Door_Act_Height(a4)
		move.b	#1,Door_Close_After(a4)
		move.l	#Door_Main,Bob_Routine(a4)
		move.l	#Door_Open_R,Door_Open_Rout(a4)
		move.b	#50,Door_Wait_Time(a4)
		bsr	Make_TEMET_Koll
		rts
*-------------------------------------------------------------------------------------
Init_Door_But	*--*>Bere Max Height
		jsr	Calc_Door_Height
		move.b	d7,Door_Max_Height(a4)
		move.b	d7,Door_Act_Height(a4)
		move.b	#0,Door_Close_After(a4)
		move.l	#Door_Main,Bob_Routine(a4)
		move.l	#Door_Open_But,Door_Open_Rout(a4)
		bsr	Make_TEMET_Koll
		rts
*-------------------------------------------------------------------------------------
Door_Main		*--*>Standart Routs
		bsr	Calc_TEMET_Diff
		bsr	Make_TEMET_Koll
		jsr	Test_Bob_Out
		*--*test if koll clear
		cmp.b	#BOB_FALSE,Bob_Used(a4)
		bne.s	.NoClearKollis
		*--*>Clear Door Kollis
		bra	Clear_TEMET_Koll

.NoClearKollis	*--Test if Door should open
		jsr	Door_Show
		tst.b	Door_Open_It(a4)
		beq.s	.Test_Init_Open
		bpl.s	.Make_Open
		*--Close_Door
		move.b	Door_Act_Height(a4),d0
		cmp.b	Door_Max_Height(a4),d0
		blo.s	.Close_Door
		*--End_Close_Door
		clr.b	Door_Open_It(a4)
		rts

.Close_Door		*--*>Close_Door ?
		lea	(a6),a2
		move	TEMET_X_Position(a2),d0
		add	#16,d0
		sub	Bob_X_Position(a4),d0
		subq	#8,d0
		tst	d0
		bpl.s	.okpos1
		neg	d0
.okpos1		cmp	#12,d0
		blo.s	.Make_GFX_offset
		addq.b	#1,Door_Act_Height(a4)
		bsr	Make_TEMET_Koll
		rts

.Test_Init_Open	*--Call Rout to test init open
		move.l	Door_Open_Rout(a4),a0
		jsr	(a0)
		rts
*- - - - - - - - - - - - - - - - - - - - - - - - - - - -
.Make_Open		*--Test Open Door
		cmp.b	#4,Door_Act_Height(a4)
		bhi.s	.Open_Door
		*--Bereits geffnet
		tst.b	Door_Close_After(a4)
		beq.s	.Make_GFX_offset
		*--Sub Wait Time
		subq.b	#1,Door_Wait_Time(a4)
		bne.s	.Make_GFX_offset
		*--Test if TEMET is under Door
		lea	(a6),a2
		move	TEMET_X_Position(a2),d0
		add	#16,d0
		sub	Bob_X_Position(a4),d0
		subq	#8,d0
		tst	d0
		bpl.s	.okpos
		neg	d0
.okpos		cmp	#12,d0
		bhs.s	.InitDown
		addq.b	#1,Door_Wait_Time(a4)
		bra.s	.Make_GFX_offset
.InitDown		*--init_Door_Up
		move.b	#-1,Door_Open_It(a4)		
		move.b	#25,Door_Wait_Time(a4)
		bra.s	.Make_GFX_offset
.Open_Door		*--Open Door
		subq.b	#2,Door_Act_Height(a4)
		bsr	Clear_TEMET_Koll
		bsr	Make_TEMET_Koll
*- - - - - - - - - - - - - - - - - - - - - - - - - - - -
.Make_GFX_offset	rts
*-------------------------------------------------------------------------------------
Door_Show:		*--*>Show Rout
		move.l	Door_Anims(a4),a0
		move.l	(a0),Bob_Next_Anim(a4)
		cmp.b	#32,Door_Act_Height(a4)
		bhs.s	.OkBigDoor
		move.l	4(a0),Bob_Next_Anim(a4)
.OkBigDoor		jsr	Get_Next_Bob_Frame
		move.b	Door_Act_Height(a4),d0
		sub.b	#64,d0
		ext.w	d0
		add	d0,Bob_Y_Offset(a4)

		move	Bob_X_Position(a4),d0
		move	Bob_Y_Position(a4),d1
		sub	#32,d1
		jsr	Check_Object_Borders_Jan
		beq.s	.NoDisplay
		move.l	Door_Anims(a4),a0
		move.l	8(a0),d2
		beq.s	.NoDisplay
		move	12(a0),d3
		move.l	d2,a0
		jsr	Add_Simple_Sigel

.NoDisplay	move.l	Door_Show_Rout(a4),a0
		jsr	(a0)
		rts
*-------------------------------------------------------------------------------------
Door_Open_LR	*--*>Test if Open left Right
		move	Door_X_Dif(a4),d0
		tst	d0
		beq.s	.NotOpen
		bpl.s	.posd0
		neg	d0
.posd0		cmp	#64,d0
		bhi.s	.NotOpen
		*--Open
		move.b	#1,Door_Open_It(a4)
.NotOpen		rts
*-------------------------------------------------------------------------------------
Door_Open_L		*--*>Test if Open Left
		move	Door_X_Dif(a4),d0
		tst	d0
		bpl.s	.NotOpen
		neg	d0
		cmp	#64,d0
		bhi.s	.NotOpen
		*--Open
		move.b	#1,Door_Open_It(a4)
.NotOpen		rts
*-------------------------------------------------------------------------------------
Door_Open_R		*--*>Test if Open Right
		move	Door_X_Dif(a4),d0
		tst	d0
		beq.s	.NotOpen
		bmi.s	.NotOpen
		cmp	#64,d0
		bhi.s	.NotOpen
		*--Open
		move.b	#1,Door_Open_It(a4)
.NotOpen		rts	rts
*-------------------------------------------------------------------------------------
Door_Open_But	*--Test open Door But
		tst	Open_Door_But(a6)
		beq.s	.Dont_init_Open
		*--Init Door Open
		move.b	#1,Door_Open_It(a4)
.Dont_init_Open	rts
**************************************************************************************
*-------------------------------------------------------------------------------------
*----------------	BUTTONS GLOBALS
*-------------------------------------------------------------------------------------
**************************************************************************************
Button_Display	=Bob_Plane_Order	;LW
Button_Routine	=Bob_Koords_Save1	;LW
Button_Work_Anim	=Bob_Koords_Save2	;LW
Button_Out_Rout	=Bob_Special_3	;LW
Button_Timer	=Bob_Hit+1	;B
Button_Working	=Bob_Hit		;B
*-------------------------------------------------------------------------------------
Gl_Button:		*--*>Standart Routines
		tst.b	Button_Working(a4)
		beq.s	.TestOut
		move.l	Button_Routine(a4),a0
		jsr	(a0)
		bra.s	.NoTestOut		; :-) Mickey
.TestOut		jsr	Test_Bob_Out
		cmp.b	#BOB_FALSE,Bob_Used(a4)
		bne.s	.NoTestOut
		move.l	Button_Out_Rout(a4),a0
		jmp	(a0)

.NoTestOut	jsr	Standart_BobAnim
		move.l	Button_Display(a4),a0
		jsr	(a0)
		*--Test If Button Pressed
		tst.b	Button_Timer(a4)		;This effects
		beq	.Test_Kollision		;once-jumping
		subq.b	#1,Button_Timer(a4)		;after pressing
		bra	.No_Button_Pressed		;the button!
.Test_Kollision	lea	(a6),a2
		jsr	KollTopBobTest
		tst	d7
		bmi 	.No_Button_Pressed
		jsr	Make_Bump
		move.l	Button_Work_Anim(a4),Bob_Next_Anim(a4)
		clr.w	Bob_Anim_Delay(a4)
		move.b	#1,Button_Working(a4)
		move.b	#50,Button_Timer(a4)
.No_Button_Pressed	rts
*-------------------------------------------------------------------------------------


**************************************************************************************
*-------------------------------------------------------------------------------------
I_Gl_Water_Up:	*--*>Init Water Up
		tst	Water_Moves(a6)
		bne.s	.Wait
		move	#1,Water_Moves(a6)
		move.l	#But_Ef1_Water_Up,Button_Routine(a4)
.Wait		rts
But_Ef1_Water_Up:	*--*>Move Water !
		move	WaterBase(a6),d1
		and	#$f,d1
		bne.s	.NoBtest
		move	Bob_X_Position(a4),d0
		move	WaterBase(a6),d1
		jsr	Get_Block_Flags
		swap	d0
		btst	#SCR_EFFECT_BIT,d0
		beq.s	.NoBtest
		*--*>Out This
		bra.s	.Austragen
.NoBtest		subq	#1,WaterBase(a6)
		rts
.Austragen		*--Effect Austragen
		clr.w	Water_Moves(a6)
		clr.b	Button_Working(a4)
		move.l	#I_Gl_Water_Up,Button_Routine(a4)
		rts
*-------------------------------------------------------------------------------------
I_Gl_Water_Down:	*--*>Init Water Down
		tst	Water_Moves(a6)
		bne.s	.Wait
		move	#1,Water_Moves(a6)
		move.l	#But_Ef2_Water_Down,Button_Routine(a4)
.Wait		rts
But_Ef2_Water_Down:	*--*>Move Water !
		move	WaterBase(a6),d1
		and	#$f,d1
		bne.s	.NoBtest
		move	Bob_X_Position(a4),d0
		move	WaterBase(a6),d1
		jsr	Get_Block_Flags
		swap	d0
		btst	#SCR_EFFECT_BIT,d0
		beq.s	.NoBtest
		*--*>Out This
		bra.s	.Austragen
.NoBtest		addq	#1,WaterBase(a6)
		rts
.Austragen		*--Effect Austragen
		clr.w	Water_Moves(a6)
		clr.b	Button_Working(a4)
		move.l	#I_Gl_Water_Down,Button_Routine(a4)
		rts
*-------------------------------------------------------------------------------------
I_Gl_Venti_Off:	move.w	#6*60,Venti_Off_But(a6)
		move.l	#Gl_Venti_Off,Button_Routine(a4)
		rts
Gl_Venti_Off:	subq	#1,Venti_Off_But(a6)
		bgt.s	.Ende
		move.l	#I_Gl_Venti_Off,Button_Routine(a4)
		clr.w	Venti_Off_But(a6)
		clr.b	Button_Working(a4)
.Ende		rts

I_Gl_Venti_On:	clr.w	Venti_Off_But(a6)
		clr.b	Button_Working(a4)
		rts
*-------------------------------------------------------------------------------------
I_Gl_Door_Up:	move.w	#1,Open_Door_But(a6)
		clr.b	Button_Working(a4)
		rts
But_Clear_Door_Up:	clr.w	Open_Door_But(a6)
		rts
*-------------------------------------------------------------------------------------
I_Falle_1_Ausl:	*--*>Falle 1 auslsen
		move	#1,Falle_1_Set(a6)
		move.l	#Falle_1_Ausl_Clr,Button_Routine(a4)
		rts
Falle_1_Ausl_Clr:	*--*>Auslser lschen
		clr.b	Button_Working(a4)
		clr.w	Falle_1_Set(a6)
		move.l	#I_Falle_1_Ausl,Button_Routine(a4)
		rts
*-------------------------------------------------------------------------------------
I_Falle_2_Ausl:	*--*>Falle 1 auslsen
		move	#1,Falle_2_Set(a6)
		move.l	#Falle_2_Ausl_Clr,Button_Routine(a4)
		rts
Falle_2_Ausl_Clr:	*--*>Auslser lschen
		clr.b	Button_Working(a4)
		clr.w	Falle_2_Set(a6)
		move.l	#I_Falle_2_Ausl,Button_Routine(a4)
		rts
**************************************************************************************
*-------------------------------------------------------------------------------------
*-----------------	GLOBAL WATER MOVE EFFECTS
*-------------------------------------------------------------------------------------
**************************************************************************************
Gl_EFF_W_UP_I:	dc.l	Gl_I_Water_UP
		dc.w	13,48
		dc.l	NullAnim
		dc.w	0,-1
		dc.b	0,BOB_MID_PRIO
Gl_EFF_W_DOWN_I:	dc.l	Gl_I_Water_DOWN
		dc.w	13,48
		dc.l	NullAnim
		dc.w	0,-1
		dc.b	0,BOB_MID_PRIO
Gl_WATER_COME_I:	dc.l	Gl_I_Water_COME
		dc.w	13,48
		dc.l	NullAnim
		dc.w	0,-1
		dc.b	0,BOB_MID_PRIO
*-------------------------------------------------------------------------------------
Gl_I_Water_UP	*--*>Init The Ctrl Bob
		move.w	#200,Bob_Out_X_Val(a4)
		move.l	Last_Water_Move_Eff(a6),a0
		cmp.l	Bob_Entry_Adress(a4),a0
		bne.s	.Continue
		jsr	Out_Bob
		rts
.Continue		tst	Water_Moves(a6)
		bne.s	.Ende
		move	#1,Water_Moves(a6)
		move.l	#Gl_Make_Water_UP_EFF,Bob_Routine(a4)
		move.l	Bob_Entry_Adress(a4),Last_Water_Move_Eff(a6)
		and	#$fff0,Bob_X_Position(a4)
.Ende		rts
*-------------------------------------------------------------------------------------
Gl_I_Water_DOWN	*--*>Init The Ctrl Bob
		move.w	#200,Bob_Out_X_Val(a4)
		move.l	Last_Water_Move_Eff(a6),a0
		cmp.l	Bob_Entry_Adress(a4),a0
		bne.s	.Continue
		jsr	Out_Bob
		rts
.Continue		tst	Water_Moves(a6)
		bne.s	.Ende
		move	#1,Water_Moves(a6)
		move.l	#Gl_Make_Water_DOWN_EFF,Bob_Routine(a4)
		move.l	Bob_Entry_Adress(a4),Last_Water_Move_Eff(a6)
		and	#$fff0,Bob_X_Position(a4)
.Ende		rts
*-------------------------------------------------------------------------------------
Gl_I_Water_COME	*--*>Init The Ctrl Bob
		move.w	#200,Bob_Out_X_Val(a4)
		tst	Water_Moves(a6)
		bne.s	.Ende
		move	#1,Water_Moves(a6)
		move.l	#Gl_Make_Water_COME_EFF,Bob_Routine(a4)
		move.l	Bob_Entry_Adress(a4),Last_Water_Move_Eff(a6)
.Ende		rts
*-------------------------------------------------------------------------------------
*-------------------------------------------------------------------------------------
Gl_Make_Water_COME_EFF	*--*>Make Water Up
		move	WaterBase(a6),d0
		sub	Bob_Y_Position(a4),d0
		beq.s	.EndIt
		bpl.s	.Make_Water_Up
.Make_Water_Down	addq	#1,WaterBase(a6)
		rts
.Make_Water_Up	subq	#1,WaterBase(a6)
		rts
.EndIt		*--*>Out This
		jsr	Out_Bob
		clr.w	Water_Moves(a6)
		rts
*-------------------------------------------------------------------------------------
Gl_Make_Water_UP_EFF	*--*>Make Water Up
		subq	#1,WaterBase(a6)
		bmi.s	.OutSpecial
		move	WaterBase(a6),d1
		and	#$f,d1
		bne.s	.Ende
		move	Bob_X_Position(a4),d0
		move	WaterBase(a6),d1
		jsr	Get_Block_Flags
		swap	d0
		btst	#SCR_EFFECT_BIT,d0
		beq.s	.Ende
.Over		*--*>Out This
		jsr	Out_Bob
		clr.w	Water_Moves(a6)
.Ende		rts
.OutSpecial		clr.w	WaterBase(a6)
		bra.s	.Over
*-------------------------------------------------------------------------------------
Gl_Make_Water_DOWN_EFF	*--*>Make Water Up
		addq	#1,WaterBase(a6)
		move	Scr_Y_Max(a6),d0
		add.w	#224,d0
		cmp	WaterBase(a6),d0
		bls.s	.OutSpecial
		move	WaterBase(a6),d1
		and	#$f,d1
		bne.s	.Ende
		move	Bob_X_Position(a4),d0
		move	WaterBase(a6),d1
		jsr	Get_Block_Flags
		swap	d0
		btst	#SCR_EFFECT_BIT,d0
		beq.s	.Ende
.Over		*--*>Out This
		jsr	Out_Bob
		clr.w	Water_Moves(a6)
.Ende		rts
.OutSpecial		move	d0,WaterBase(a6)
		bra.s	.Over
**************************************************************************************
*-------------------------------------------------------------------------------------
*--------------------	GLOBAL FISCHE
*-------------------------------------------------------------------------------------
**************************************************************************************
		rsreset
Fish_Swim_Right_Anim	rs.l	1
Fish_Swim_Left_Anim	rs.l	1
Fish_Wait_Right_Anim	rs.l	1
Fish_Wait_Left_Anim	rs.l	1
Fish_Dam_Right_Anim	rs.l	1
Fish_Dam_Left_Anim	rs.l	1
*-------------------------------------------------------------------------------------
Fish_Display	=Bob_Plane_Order	;LW
Fish_Anim_Tab	=Bob_Koords_Save2	;LW
Fish_X_Dir		=Bob_Special_1	;B
Fish_Y_Offs		=Bob_Special_1+1	;B
Fish_Y_Speed	=Bob_Special_2	;W
Fish_X_Speed	=Bob_Special_3	;W
Fish_X_Wait_Time	=Bob_Special_4	;B
Fish_X_Range	=Bob_Special_4+1	;B
*-------------------------------------------------------------------------------------
MAX_FISH_RANGE	=240
*-------------------------------------------------------------------------------------
Fish_Routine:	*--*>Normal Fish Rout
		jsr	Test_Fish_Out
		jsr	Make_Fish_Y_UPDOWN
		tst.b	Fish_X_Wait_Time(a4)
		beq.s	.MoveX
		subq.b	#1,Fish_X_Wait_Time(a4)
		bra.s	.NoMoveX
.MoveX		jsr	Make_Fish_Move
		jsr	Standart_BobAnim
		jsr	Check_Fish_X_Koll
.NoMoveX		jsr	Test_Fish_Hit
		jsr	Test_TEMET_Hit
		move.l	Fish_Display(a4),a0
		jsr	(a0)
		rts
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Fish_Fall_Damage:	*--*>Fish Damaged
		jsr	Test_Fish_Out
		jsr	Standart_BobAnim
		jsr	Make_Y_Speed
		move.l	Fish_Display(a4),a0
		jsr	(a0)
		jsr	Check_Fish_Ground
		rts
*-------------------------------------------------------------------------------------
*--------------------	GLOBAL FISCH-ROUTS
*-------------------------------------------------------------------------------------
Make_Fish_Move:	*--*>Move X
		addq	#1,Bob_X_Position(a4)
		tst.b	Fish_X_Dir(a4)
		bpl.s	.NoSub
		subq	#2,Bob_X_Position(a4)
.NoSub		rts
*-------------------------------------------------------------------------------------
Check_Fish_X_Koll:	*--*>Fish X Koll
		addq.b	#1,Fish_X_Range(a4)
		cmp.b	#MAX_FISH_RANGE,Fish_X_Range(a4)
		bne.s	.CheckKolli
		bra.s	.ChangeXDir
.CheckKolli		move	Bob_X_Position(a4),d0
		move	Bob_Y_Position(a4),d1
		add	#16,d1
		tst.b	Fish_X_Dir(a4)
		bmi.s	.TestLeftXKoll
		add	#32,d0
.TestLeftXKoll	jsr	Get_Block_Flags
		swap	d0
		btst	#SCR_KOLLISION_BIT,d0
		beq.s	.NoXKolli
.ChangeXDir		clr.b	Fish_X_Range(a4)
		neg.b	Fish_X_Dir(a4)
		move.b	#80,Fish_X_Wait_Time(a4)
		move.l	Fish_Anim_Tab(a4),a0
		move.l	Fish_Wait_Right_Anim(a0),Bob_Next_Anim(a4)
		tst.b	Fish_X_Dir(a4)
		bpl.s	.okR
		move.l	Fish_Wait_Left_Anim(a0),Bob_Next_Anim(a4)
.okR		jsr	Get_Next_Bob_Frame
.NoXKolli		rts
*-------------------------------------------------------------------------------------
Make_Y_Speed:	*--*>Beschl to Ground
		cmp	#$0400,Fish_Y_Speed(a4)
		bhs.s	.NoBeschl
		add	#$0010,Fish_Y_Speed(a4)
.NoBeschl		move.b	Fish_Y_Speed(a4),d0
		ext.w	d0
		add	d0,Bob_Y_Position(a4)
		move.b	Fish_X_Speed(a4),d0
		ext.w	d0
		add	d0,Bob_X_Position(a4)
		rts
*-------------------------------------------------------------------------------------
Test_Fish_Hit:	*--*Y>Test if FISH is Hit
		lea	(a6),a2
		jsr	KollTopBobTest
		tst	d7
		bmi.s	.NoKollFin
		lea	(a6),a2
		jsr	Make_Bump
		move.l	#Fish_Fall_Damage,Bob_Routine(a4)
		clr.w	Bob_Anim_Delay(a4)
		move	#$0100,Fish_Y_Speed(a4)
		move.l	Fish_Anim_Tab(a4),a0
		move.l	Fish_Dam_Right_Anim(a0),Bob_Next_Anim(a4)
		move	#$0100,Fish_X_Speed(A4)
		tst.b	Fish_X_Dir(a4)		
		bpl.s	.OkRight
		move.l	Fish_Dam_Left_Anim(a0),Bob_Next_Anim(a4)
		move	#-$0100,Fish_X_Speed(A4)
.OkRight		jsr	ENTER_SMOKE_X
		jsr	ENTER_SMOKE_Y
.NoKollFin		rts
*-------------------------------------------------------------------------------------
Check_Fish_Ground:	*--*>Check Ground
		move	Bob_X_Position(a4),d0
		move	Bob_Y_Position(a4),d1
		add	#24,d1
		jsr	Get_Block_Icon
		add	d0,d0
		add	d0,d0
		move.l	Scr_Block_EntryAdrs(a6),a1
		move.l	(a1,d0),a1
		cmp.b	#swand,Block_Through(a1)
		beq.s	.Damage
		cmp.b	#boden,Block_Through(a1)
		bne.s	.NoDamage
.Damage		jsr	ENTER_SMOKE_X
		jsr	ENTER_SMOKE_Y
		jsr	Out_Bob_Damage
.NoDamage		rts		
*-------------------------------------------------------------------------------------
Make_Fish_Y_UPDOWN:	*--Fish schwankt hoch runter
		lea	.Fish_Y_UD_TAB,a0
		moveq	#0,d0
		move.b	Fish_Y_Offs(a4),d0
		move.b	(a0,d0),d1
		ext.w	d1
		add	d1,Bob_Y_Position(a4)
		addq	#1,d0
		cmp.b	#-2,(a0,d0)
		bne.s	.WriteNewOffs
		moveq	#0,d0
.WriteNewOffs	move.b	d0,Fish_Y_Offs(a4)
		rts
.Fish_Y_UD_TAB	dc.b	-1,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,-1,0,0,0,0,0,-1,0,0,0,0,-1,0,0,0,0,0,-1,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0
		dc.b	+1,0,0,0,0,0,0,0,0,+1,0,0,0,0,0,0,0,+2,0,0,0,0,0,0,+1,0,0,0,0,0,+1,0,0,0,0,+1,0,0,0,0,0,+1,0,0,0,0,0,0,+1,0,0,0,0,0,0,0,+1,0,0,0,0,0,0,0,0
		dc.w	-2
*-------------------------------------------------------------------------------------
Test_Fish_Out	*--*>
		jsr	Test_Bob_Out
		move	WaterBase(a6),d0
		sub	Bob_Y_Position(a4),d0
		bmi.s	.NoOut
		cmp	#16,d0
		bls.s	.NoOut
		cmp	#48,d0
		bls.s	.SetPos
		jsr	Out_Bob
.NoOut		rts
.SetPos		move	WaterBase(a6),Bob_Y_Position(a4)
		rts
**************************************************************************************
	ENDC

